SQLAlchemy ORM - Mendeklarasikan Pemetaan

Tujuan utama API Pemeta Relasional Objek SQLAlchemy adalah untuk memfasilitasi pengaitan kelas Python yang ditentukan pengguna dengan tabel database, dan objek kelas tersebut dengan baris dalam tabel yang sesuai. Perubahan status objek dan baris dicocokkan secara sinkron satu sama lain. SQLAlchemy memungkinkan pengungkapan kueri database dalam hal kelas yang ditentukan pengguna dan hubungan yang ditentukan.

ORM dibangun di atas SQL Expression Language. Ini adalah pola penggunaan tingkat tinggi dan abstrak. Faktanya, ORM adalah penggunaan terapan dari Expression Language.

Meskipun aplikasi yang berhasil dapat dibangun dengan menggunakan Object Relational Mapper secara eksklusif, terkadang aplikasi yang dibangun dengan ORM dapat menggunakan Expression Language secara langsung di mana interaksi database tertentu diperlukan.

Deklarasikan Pemetaan

Pertama-tama, fungsi create_engine () dipanggil untuk menyiapkan objek mesin yang selanjutnya digunakan untuk melakukan operasi SQL. Fungsi ini memiliki dua argumen, satu adalah nama database dan lainnya adalah parameter gema jika disetel ke True akan menghasilkan log aktivitas. Jika tidak ada, database akan dibuat. Dalam contoh berikut, database SQLite dibuat.

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

Engine membuat koneksi DBAPI nyata ke database saat metode seperti Engine.execute () atau Engine.connect () dipanggil. Ini kemudian digunakan untuk memancarkan SQLORM yang tidak menggunakan Mesin secara langsung; sebaliknya, ini digunakan di belakang layar oleh ORM.

Dalam kasus ORM, proses konfigurasi dimulai dengan mendeskripsikan tabel database dan kemudian dengan menentukan kelas yang akan dipetakan ke tabel tersebut. Di SQLAlchemy, kedua tugas ini dilakukan bersama. Ini dilakukan dengan menggunakan sistem Deklaratif; kelas yang dibuat menyertakan arahan untuk mendeskripsikan tabel database aktual tempat mereka dipetakan.

Kelas dasar menyimpan catlog kelas dan tabel yang dipetakan dalam sistem Deklaratif. Ini disebut sebagai kelas dasar deklaratif. Biasanya hanya akan ada satu contoh dari basis ini dalam modul yang biasa diimpor. Fungsi declarative_base () digunakan untuk membuat kelas dasar. Fungsi ini didefinisikan dalam modul sqlalchemy.ext.declarative.

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

Setelah kelas dasar dideklarasikan, sejumlah kelas yang dipetakan dapat didefinisikan dalam istilah itu. Kode berikut mendefinisikan kelas Pelanggan. Ini berisi tabel yang akan dipetakan, dan nama dan tipe data kolom di dalamnya.

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

Kelas di Deklaratif harus memiliki __tablename__ atribut, dan setidaknya satu Columnyang merupakan bagian dari kunci utama. Deklaratif menggantikan semua fileColumn objek dengan aksesor Python khusus yang dikenal sebagai descriptors. Proses ini dikenal sebagai instrumentasi yang menyediakan sarana untuk merujuk ke tabel dalam konteks SQL dan memungkinkan mempertahankan dan memuat nilai kolom dari database.

Kelas yang dipetakan ini seperti kelas Python normal memiliki atribut dan metode sesuai kebutuhan.

Informasi tentang kelas dalam sistem Deklaratif disebut sebagai tabel metadata. SQLAlchemy menggunakan objek Tabel untuk mewakili informasi ini untuk tabel tertentu yang dibuat oleh Deklaratif. Objek Tabel dibuat sesuai dengan spesifikasi, dan dikaitkan dengan kelas dengan membangun objek Mapper. Objek mapper ini tidak langsung digunakan tetapi digunakan secara internal sebagai antarmuka antara kelas yang dipetakan dan tabel.

Setiap objek Tabel adalah anggota dari koleksi yang lebih besar yang dikenal sebagai MetaData dan objek ini tersedia menggunakan .metadataatribut kelas dasar deklaratif. ItuMetaData.create_all()metode ini, meneruskan Engine kami sebagai sumber konektivitas database. Untuk semua tabel yang belum dibuat, ini mengeluarkan pernyataan CREATE TABLE ke database.

Base.metadata.create_all(engine)

Skrip lengkap untuk membuat database dan tabel, dan untuk memetakan kelas Python diberikan di bawah ini -

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)

Saat dijalankan, konsol Python akan bergema setelah ekspresi SQL dijalankan -

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

Jika kita membuka Sales.db menggunakan alat grafik SQLiteStudio, ini menunjukkan tabel pelanggan di dalamnya dengan struktur yang disebutkan di atas.