SQLAlchemy: Perbedaan antara revisi
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 28026362; atribusi sumber disertakan. |
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi |
||
| Baris 1: | Baris 1: | ||
[[File:Mike_Bayer_talking_about_SQLAlchemy_at_PyCon_2012_a.jpg|thumb|right|280px|Mike Bayer berbicara tentang SQLAlchemy di PyCon 2012]] | |||
'''SQLAlchemy''' merupakan sekumpulan [[Perangkat lunak sumber terbuka|perangkat lunak dengan sumber terbuka]] untuk [[SQL]] dan Pemetaan Objek Relasional [[Pemetaan objek-relasional|(object-relational mapper]] disingkat dengan ORM) untuk [[Python (bahasa pemrograman)|bahasa pemrograman Python]]. Aplikasi ini dirilis dengan menggunakan [[Lisensi MIT]]. | '''SQLAlchemy''' merupakan sekumpulan [[Perangkat lunak sumber terbuka|perangkat lunak dengan sumber terbuka]] untuk [[SQL]] dan Pemetaan Objek Relasional [[Pemetaan objek-relasional|(object-relational mapper]] disingkat dengan ORM) untuk [[Python (bahasa pemrograman)|bahasa pemrograman Python]]. Aplikasi ini dirilis dengan menggunakan [[Lisensi MIT]]. | ||
| Baris 4: | Baris 6: | ||
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. | 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 data mapper|pola pemetaan data]] (seperti [[Hibernasi (Jawa)|Hibernate]] pada bahasa [[Java]]) kemudian menjadi pilihan untuk diadopsi ke dalam SQLAlchemy. Namun pengguna tetap dapat menggunakan sintaks deklaratif dengan menggunakan ''[[plugin]]'' yang disediakan. | Atas alasan ini maka [[Pola data mapper|pola pemetaan data]] (seperti [[Hibernasi (Jawa)|Hibernate]] pada bahasa [[Java]]) kemudian menjadi pilihan untuk diadopsi ke dalam SQLAlchemy.<ref>in [http://www.aosabook.org/en/sqlalchemy.html The architecture of open source applications]</ref> Namun pengguna tetap dapat menggunakan sintaks deklaratif dengan menggunakan ''[[plugin]]'' yang disediakan.<ref>[https://docs.sqlalchemy.org/orm/extensions/declarative/ Declarative]</ref> | ||
== Sejarah == | == Sejarah == | ||
SQLAlchemy dirilis pertama sekali pada bulan Februari 2006. Saat ini SQLAlchemy menjadi salah satu alat bantu yang paling banyak digunakan di dalam komunitas Python. | SQLAlchemy dirilis pertama sekali pada bulan Februari 2006.<ref>http://decisionstats.com/2015/12/29/interview-mike-bayer-sqlalchemy-pydata-python/</ref> Saat ini SQLAlchemy menjadi salah satu alat bantu yang paling banyak digunakan di dalam komunitas Python. | ||
== Contoh == | == Contoh == | ||
| Baris 13: | Baris 15: | ||
=== Definisi skema === | === Definisi skema === | ||
Membuat kelas dan tabel di dalam database: | 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 === | === Penyisipan data === | ||
Perintah berikut dapat digunakan untuk menyisipkan hubungan antara sutradara dan film dengan menggunakan salah satu entitas: | 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 === | === 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 <code>lazy=True</code> (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 == | == Lihat pula == | ||
* [[PySheds]] | * [[PySheds]] | ||
== Pranala luar == | == Pranala luar == | ||
* [https://overiq.com/sqlalchemy/101/intro-to-sqlalchemy/ Tutorial SQLAlchemy] | * [https://overiq.com/sqlalchemy/101/intro-to-sqlalchemy/ Tutorial SQLAlchemy] | ||
* [https://www.sqlalchemy.org/ Situs Resmi] | * [https://www.sqlalchemy.org/ Situs Resmi] | ||
== Referensi == | |||
<references /> | |||
== Sumber dan atribusi == | |||
== | Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=SQLAlchemy&oldid=28026362 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. | ||
<!-- WIKI_UNISSULA_PRESENTATION_V4 --> | |||
Revisi terkini sejak 24 Agustus 2026 18.01
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.