SQLAlchemy ORM - Eşlemeyi Bildirme

SQLAlchemy'nin Object Relational Mapper API'sinin temel amacı, kullanıcı tanımlı Python sınıflarını veritabanı tablolarıyla ve bu sınıfların nesnelerini karşılık gelen tablolardaki satırlarla ilişkilendirmeyi kolaylaştırmaktır. Nesnelerin ve satırların durumlarındaki değişiklikler birbiriyle eşzamanlı olarak eşleştirilir. SQLAlchemy, veritabanı sorgularının kullanıcı tanımlı sınıflar ve bunların tanımlı ilişkileri açısından ifade edilmesini sağlar.

ORM, SQL İfade Dili üzerine inşa edilmiştir. Yüksek seviyeli ve soyutlanmış bir kullanım şeklidir. Aslında ORM, İfade Dilinin uygulamalı bir kullanımıdır.

Başarılı bir uygulama yalnızca Nesne İlişkisel Eşleştiricisi kullanılarak oluşturulabilse de, bazen ORM ile oluşturulan bir uygulama, belirli veritabanı etkileşimlerinin gerekli olduğu durumlarda İfade Dilini doğrudan kullanabilir.

Eşleme Bildir

Öncelikle, daha sonra SQL işlemlerini gerçekleştirmek için kullanılacak bir motor nesnesi kurmak için create_engine () işlevi çağrılır. İşlevin iki bağımsız değişkeni vardır, biri veritabanının adıdır ve diğeri True olarak ayarlandığında etkinlik günlüğünü oluşturacak bir yankı parametresidir. Mevcut değilse, veritabanı oluşturulacaktır. Aşağıdaki örnekte, bir SQLite veritabanı oluşturulmuştur.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db', echo = True)

Engine, Engine.execute () veya Engine.connect () gibi bir yöntem çağrıldığında veritabanına gerçek bir DBAPI bağlantısı kurar. Daha sonra Motoru doğrudan kullanmayan SQLORM yayınlamak için kullanılır; bunun yerine, ORM tarafından perde arkasında kullanılır.

ORM durumunda, konfigürasyon süreci veritabanı tablolarını açıklayarak ve daha sonra bu tablolara eşlenecek sınıfları tanımlayarak başlar. SQLAlchemy'de bu iki görev birlikte gerçekleştirilir. Bu, Bildirim sistemi kullanılarak yapılır; oluşturulan sınıflar, eşlendikleri gerçek veritabanı tablosunu tanımlayan yönergeleri içerir.

Temel sınıf, Bildirime Dayalı sistemde sınıfların kataloğunu ve eşlenmiş tabloları depolar. Bu, bildirim temelli temel sınıf olarak adlandırılır. Yaygın olarak içe aktarılan bir modülde genellikle bu temelin yalnızca bir örneği olacaktır. Declarative_base () işlevi, temel sınıf oluşturmak için kullanılır. Bu fonksiyon sqlalchemy.ext.declarative modülünde tanımlanmıştır.

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

Temel sınıf bir kez bildirildikten sonra, herhangi bir sayıda eşlenmiş sınıf bu sınıflar açısından tanımlanabilir. Aşağıdaki kod, bir Müşterinin sınıfını tanımlar. Eşlenecek tabloyu ve içindeki sütunların adlarını ve veri türlerini içerir.

class Customers(Base):
   __tablename__ = 'customers'
   
   id = Column(Integer, primary_key = True)
   name = Column(String)
   address = Column(String)
   email = Column(String)

Bildirge'deki bir sınıfın bir __tablename__ öznitelik ve en az bir Columnbirincil anahtarın parçası olan. Bildirim, tümColumn olarak bilinen özel Python erişimcili nesneler descriptors. Bu işlem, bir SQL bağlamında tabloya başvurmak için araçlar sağlayan ve veritabanından sütunların değerlerinin kalıcı hale getirilmesini ve yüklenmesini sağlayan araçlar olarak bilinir.

Normal bir Python sınıfı gibi bu eşlenmiş sınıf, gereksinime göre özniteliklere ve yöntemlere sahiptir.

Bildirime dayalı sistemde sınıfla ilgili bilgiler tablo meta verileri olarak adlandırılır. SQLAlchemy, bu bilgileri Declarative tarafından oluşturulan belirli bir tablo için temsil etmek üzere Table nesnesini kullanır. Tablo nesnesi, belirtimlere göre oluşturulur ve bir Mapper nesnesi oluşturularak sınıfla ilişkilendirilir. Bu eşleyici nesne doğrudan kullanılmaz, ancak eşlenen sınıf ve tablo arasında arabirim olarak dahili olarak kullanılır.

Her bir Tablo nesnesi, MetaData olarak bilinen daha büyük bir koleksiyonun üyesidir ve bu nesne, .metadatabildirim temelli temel sınıfın özniteliği. MetaData.create_all()yöntem, bir veritabanı bağlantısı kaynağı olarak Motorumuza geçmektir. Henüz oluşturulmamış tüm tablolar için, veritabanına CREATE TABLE deyimleri yayınlar.

Base.metadata.create_all(engine)

Bir veritabanı ve bir tablo oluşturmak ve Python sınıfını eşlemek için eksiksiz komut dosyası aşağıda verilmiştir -

from sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
engine = create_engine('sqlite:///sales.db', echo = True)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

class Customers(Base):
   __tablename__ = 'customers'
   id = Column(Integer, primary_key=True)

   name = Column(String)
   address = Column(String)
   email = Column(String)
Base.metadata.create_all(engine)

Çalıştırıldığında, Python konsolu çalıştırılan SQL ifadesinin ardından yankılanacaktır -

CREATE TABLE customers (
   id INTEGER NOT NULL,
   name VARCHAR,
   address VARCHAR,
   email VARCHAR,
   PRIMARY KEY (id)
)

Sales.db'yi SQLiteStudio grafik aracını kullanarak açarsak, yukarıda belirtilen yapıyla içindeki müşteri tablosunu gösterir.