Lompat ke isi

SQLAlchemy: Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 28026362; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
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:


''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


Keluaran atau hasil:
SELECT directors.id, directors.name
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:
FROM directors
WHERE directors.id = %s
</syntaxhighlight>


== Lihat pula ==
== Lihat pula ==
* [[PySheds]]
* [[PySheds]]
== Referensi ==
; Catatan
*
* Rick Copeland, Essential SQLAlchemy, [[Penerbit O'Reilly|O'Reilly]], 2008,


== 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 ==


== 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.


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). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->

Revisi terkini sejak 24 Agustus 2026 18.01

Berkas:Mike Bayer talking about SQLAlchemy at PyCon 2012 a.jpg
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.