Sobes.tech
Junior

Veritabanlarıyla çalışmak için hangi araçları kullandınız?

sobes.tech yapay zeka

AI'dan gelen yanıt

Veritabanlarıyla etkileşim kurmak için aşağıdaki araçlarda deneyimim var:

  • SQL İstemcileri:

    • DBeaver: çoklu veritabanı yönetim sistemlerini destekleyen evrensel bir istemci. Sorgular yazmak, verileri ve tablo yapılarını görüntülemek için kullanışlıdır.
    • pgAdmin: PostgreSQL için özel bir istemci. Gelişmiş yönetim ve izleme özellikleri sunar.
    • MySQL Workbench: MySQL için resmi araç. MySQL veritabanlarını modelleme, geliştirme ve yönetmek için kullanılır.
  • ORM'ler (kodu kullanarak etkileşim için):

    • SQLAlchemy (Python): güçlü bir ORM olup, çoğu durumda doğrudan SQL yazmadan yüksek seviyede soyutlama ile veritabanlarıyla çalışmaya olanak tanır. Otomatik testlerde, test verileri oluşturma veya doğrulama için kullanışlıdır.
  • Komut satırı araçları:

    • psql (PostgreSQL için): sorguları yürütmek, veri içe/dışa aktarmak ve betikler çalıştırmak için etkilidir.
    • mysql (MySQL için): psql'e benzer şekilde, terminalden SQL komutları yürütmek için kullanılır.
  • API Veritabanları (gerekirse testlerden doğrudan erişim):

    • Otomatik testlerde doğrudan sorgular yürütmek için kullanılan veritabanı özel kütüphanelerini (örneğin, Python için psycopg2 PostgreSQL ile, mysql.connector Python ve MySQL ile) kullandım.

Bu araçları şu amaçlarla kullandım:

  • Verileri kontrol etmek veya test ortamları oluşturmak için SQL sorguları yazmak ve hata ayıklamak.
  • Tablo yapıları, indeksler ve ilişkileri analiz etmek.
  • Veri bütünlüğünü doğrulamak.
  • Otomatik testler kapsamında test verileri oluşturmak/silmek.
  • Veritabanı durumunu izlemek (yönetim durumunda).

SQLAlchemy kullanımına örnek:

# test_db_operations.py
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# Testler için SQLite veritabanı varsayalım
DATABASE_URL = "sqlite:///./test.db"
Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String)
    email = Column(String, unique=True)

engine = create_engine(DATABASE_URL)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# Testlerden önce tabloları oluştur
Base.metadata.create_all(bind=engine)

def test_create_user():
    db = TestingSessionLocal()
    new_user = User(name="Test User", email="test@example.com")
    db.add(new_user)
    db.commit()
    db.refresh(new_user)

    # Kullanıcının eklendiğini doğrula
    user_in_db = db.query(User).filter(User.email == "test@example.com").first()
    assert user_in_db is not None
    assert user_in_db.name == "Test User"

    # Test verilerini sil
    db.delete(user_in_db)
    db.commit()
    db.close()

# Gerçek test çerçevelerinde (örneğin, pytest) oturumları yönetmek ve temizlemek için fixture'lar kullanılır

Araç seçimi her zaman belirli göreve, kullanılan veritabanına ve proje gereksinimlerine bağlıdır. Manuel araştırma ve hata ayıklama için SQL istemcileri tercih edilirken, otomasyon ve test koduna entegrasyon için ORM veya özel veritabanı sürücüleri kullanılır.