Lompat ke isi

SQLAlchemy

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Revisi sejak 24 Agustus 2026 18.01 oleh Maintenance script (bicara | kontrib) (Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi)
(beda) ← Revisi sebelumnya | Revisi terkini (beda) | Revisi selanjutnya → (beda)
Mike Bayer berbicara tentang SQLAlchemy di PyCon 2012

SQLAlchemy merupakan sekumpulan perangkat lunak dengan sumber terbuka untuk SQL dan Pemetaan Objek Relasional (object-relational mapper disingkat dengan ORM) untuk bahasa pemrograman Python. Aplikasi ini dirilis dengan menggunakan Lisensi MIT.

Deskripsi

SQLAlchemy berprinsip bahwa database relasional dapat dianggap seperti sekumpulan objek karena skalanya yang semakin besar. Selain itu kinerja dari sebuah database juga mulai menjadi perhatian.

Atas alasan ini maka pola pemetaan data (seperti Hibernate pada bahasa Java) kemudian menjadi pilihan untuk diadopsi ke dalam SQLAlchemy.[1] Namun pengguna tetap dapat menggunakan sintaks deklaratif dengan menggunakan plugin yang disediakan.[2]

Sejarah

SQLAlchemy dirilis pertama sekali pada bulan Februari 2006.[3] Saat ini SQLAlchemy menjadi salah satu alat bantu yang paling banyak digunakan di dalam komunitas Python.

Contoh

Contoh berikut mewakili hubungan n-ke-1 dengan mengambil contoh kasus: film dan sutradaranya.

Definisi skema

Membuat kelas dan tabel di dalam database: <syntaxhighlight lang="Python"> from sqlalchemy import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relation, sessionmaker

Base = declarative_base()

class Movie(Base):

   __tablename__ = 'movies'
   id = Column(Integer, primary_key=True)
   title = Column(String(255), nullable=False)
   year = Column(Integer)
   directed_by = Column(Integer, ForeignKey('directors.id'))
   director = relation("Director", backref='movies', lazy=False)
   def __init__(self, title=None, year=None):
       self.title = title
       self.year = year
   def __repr__(self):
       return "Movie(%r, %r, %r)" % (self.title, self.year, self.director)

class Director(Base):

   __tablename__ = 'directors'
   id = Column(Integer, primary_key=True)
   name = Column(String(50), nullable=False, unique=True)
   def __init__(self, name=None):
       self.name = name
   def __repr__(self):
       return "Director(%r)" % (self.name)

engine = create_engine('dbms://user:pwd@host/dbname') Base.metadata.create_all(engine)

</syntaxhighlight>

Penyisipan data

Perintah berikut dapat digunakan untuk menyisipkan hubungan antara sutradara dan film dengan menggunakan salah satu entitas: <syntaxhighlight lang="Python"> Session = sessionmaker(bind=engine) session = Session()

m1 = Movie("Robocop", 1987) m1.director = Director("Paul Verhoeven")

d2 = Director("George Lucas") d2.movies = [Movie("Star Wars", 1977), Movie("THX 1138", 1971)]

try:

   session.add(m1)
   session.add(d2)
   session.commit()

except:

   session.rollback()

</syntaxhighlight>

Query

<syntaxhighlight lang="Python"> alldata = session.query(Movie).all() for somedata in alldata:

   print somedata

</syntaxhighlight> Query berikut akan dibuat oleh SQLAlchemy ke DBMS:

<syntaxhighlight lang="SQL"> SELECT movies.id, movies.title, movies.year, movies.directed_by, directors.id, directors.name FROM movies LEFT OUTER JOIN directors ON directors.id = movies.directed_by </syntaxhighlight>

Keluaran atau hasil: <syntaxhighlight lang="python"> Movie('Robocop', 1987L, Director('Paul Verhoeven')) Movie('Star Wars', 1977L, Director('George Lucas')) Movie('THX 1138', 1971L, Director('George Lucas')) </syntaxhighlight> Jika pengaturan lazy=True (bawaan) diaktifkan maka SQLAlchemy akan membuat query untuk mendapatkan daftar film. Bila diperlukan maka akan mengambil nama sutradara yang sesuai. Lihat contoh berikut: <syntaxhighlight lang="sql"> SELECT movies.id, movies.title, movies.year, movies.directed_by FROM movies

SELECT directors.id, directors.name FROM directors WHERE directors.id = %s </syntaxhighlight>

Lihat pula

Pranala luar

Referensi

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 28026362 (2025-10-16T16:38:00Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Gambar pada artikel ini bersumber dari Wikimedia Commons dan mengikuti ketentuan lisensi masing-masing berkas. Mohon gunakan konten dan media secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.