Akses Database MySQL Python – Menggunakan DB-API Standar
Halaman Sebelumnya Halaman Berikutnya
Standar Python untuk antarmuka basis data adalah Python DB-API. Sebagian besar antarmuka basis data Python mengikuti standar ini.
Anda dapat memilih basis data yang tepat untuk aplikasi Anda. Python Database API mendukung berbagai server basis data seperti −
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
Berikut adalah daftar antarmuka basis data Python yang tersedia: Antarmuka dan API Basis Data Python. Anda harus mengunduh modul DB API terpisah untuk setiap basis data yang perlu diakses. Misalnya, jika Anda perlu mengakses basis data Oracle dan basis data MySQL, Anda harus mengunduh modul basis data Oracle dan MySQL.
DB API menyediakan standar minimal untuk bekerja dengan basis data menggunakan struktur dan sintaks Python di mana mungkin. API ini mencakup hal berikut −
- Mengimpor modul API.
- Memperoleh koneksi dengan basis data.
- Menjalankan pernyataan SQL dan prosedur tersimpan.
- Menutup koneksi
Kita akan mempelajari semua konsep menggunakan MySQL, jadi mari kita bicara tentang modul MySQLdb.
Apa itu MySQLdb?
MySQLdb adalah antarmuka untuk terhubung ke server basis data MySQL dari Python. Ia mengimplementasikan Python Database API v2.0 dan dibangun di atas MySQL C API.
Bagaimana cara Menginstal MySQLdb?
Sebelum melanjutkan, pastikan Anda telah menginstal MySQLdb pada mesin Anda. Ketikkan perintah berikut dalam skrip Python Anda dan jalankan −
#!/usr/bin/python import MySQLdb
Jika menghasilkan hasil berikut, berarti modul MySQLdb tidak terinstal −
Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb ImportError: No module named MySQLdb
Untuk menginstal modul MySQLdb, gunakan perintah berikut −
Untuk Ubuntu, gunakan perintah berikut - $ sudo apt-get install python-pip python-dev libmysqlclient-dev Untuk Fedora, gunakan perintah berikut - $ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc Untuk prompt perintah Python, gunakan perintah berikut - pip install MySQL-python
Catatan − Pastikan Anda memiliki hak akses root untuk menginstal modul di atas.
Koneksi Basis Data
Sebelum terhubung ke basis data MySQL, pastikan hal berikut −
Anda telah membuat basis data TESTDB.
Anda telah membuat tabel EMPLOYEE di TESTDB.
Tabel ini memiliki kolom FIRST_NAME, LAST_NAME, AGE, SEX dan INCOME.
ID Pengguna "testuser" dan kata sandi "test123" disetel untuk mengakses TESTDB.
Modul Python MySQLdb terinstal dengan benar pada mesin Anda.
Anda telah melalui tutorial MySQL untuk memahami Dasar MySQL.
Contoh
Berikut adalah contoh koneksi dengan basis data MySQL "TESTDB"
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() # jalankan kueri SQL menggunakan metode execute(). cursor.execute("SELECT VERSION()") # Ambil satu baris menggunakan metode fetchone(). data = cursor.fetchone() print "Versi basis data : %s " % data # putuskan koneksi dari server db.close() Saat menjalankan skrip ini, hasil berikut dihasilkan di mesin Linux saya.
Database version : 5.0.45
Jika koneksi ter Establish dengan sumber data, maka Objek Koneksi dikembalikan dan disimpan dalam db untuk penggunaan selanjutnya, jika tidak db diatur ke None. Selanjutnya, objek db digunakan untuk membuat objek cursor, yang kemudian digunakan untuk menjalankan kueri SQL. Akhirnya, sebelum keluar, memastikan bahwa koneksi basis data ditutup dan sumber daya dilepaskan.
Membuat Tabel Basis Data
Setelah koneksi basis data ter Establish, kita siap untuk membuat tabel atau catatan ke dalam tabel basis data menggunakan metode execute dari kursor yang dibuat.
Contoh
Mari kita buat Tabel Basis Data EMPLOYEE −
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() # Hapus tabel jika sudah ada menggunakan metode execute(). cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # Buat tabel sesuai kebutuhan sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # putuskan koneksi dari server db.close() Operasi INSERT
Diperlukan saat Anda ingin membuat catatan Anda ke dalam tabel basis data.
Contoh
Contoh berikut menjalankan pernyataan SQL INSERT untuk membuat catatan ke dalam tabel EMPLOYEE −
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() # Siapkan kueri SQL untuk memasukkan catatan ke dalam basis data. sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # Jalankan perintah SQL cursor.execute(sql) # Comit perubahan Anda di basis data db.commit() except: # Rollback jika ada error db.rollback() # putuskan koneksi dari server db.close() Contoh di atas dapat ditulis sebagai berikut untuk membuat kueri SQL secara dinamis −
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() # Siapkan kueri SQL untuk memasukkan catatan ke dalam basis data. sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ ('Mac', 'Mohan', 20, 'M', 2000) try: # Jalankan perintah SQL cursor.execute(sql) # Comit perubahan Anda di basis data db.commit() except: # Rollback jika ada error db.rollback() # putuskan koneksi dari server db.close() Contoh
Segmen kode berikut adalah bentuk lain eksekusi tempat Anda dapat melewatkan parameter langsung −
.................................. user_id = "test123" password = "password" con.execute('insert into Login values("%s", "%s")' % \ (user_id, password)) .................................. Operasi READ
Operasi READ pada basis data apa pun berarti mengambil informasi berguna dari basis data.
Setelah koneksi basis data ter Establish, Anda siap untuk membuat kueri ke basis data ini. Anda dapat menggunakan metode fetchone() untuk mengambil satu catatan atau metode fetchall() untuk mengambil banyak nilai dari tabel basis data.
fetchone() − Mengambil baris berikutnya dari hasil kueri. Hasil kueri adalah objek yang dikembalikan saat objek kursor digunakan untuk kueri tabel.
fetchall() − Mengambil semua baris dalam hasil kueri. Jika beberapa baris telah diekstrak dari hasil kueri, maka mengambil baris yang tersisa dari hasil kueri.
rowcount − Ini adalah atribut hanya baca dan mengembalikan jumlah baris yang terpengaruh oleh metode execute().
Contoh
Prosedur berikut mengkueri semua catatan dari tabel EMPLOYEE yang memiliki gaji lebih dari 1000 −
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() sql = "SELECT * FROM EMPLOYEE \ WHERE INCOME > '%d'" % (1000) try: # Jalankan perintah SQL cursor.execute(sql) # Ambil semua baris dalam daftar daftar. results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # Sekarang cetak hasil yang diambil print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ (fname, lname, age, sex, income ) except: print "Error: unable to fecth data" # putuskan koneksi dari server db.close() Ini akan menghasilkan hasil berikut −
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
Operasi Update
Operasi UPDATE pada basis data apa pun berarti memperbarui satu atau lebih catatan yang sudah tersedia di basis data.
Prosedur berikut memperbarui semua catatan yang memiliki SEX 'M'. Di sini, kami meningkatkan AGE semua pria satu tahun.
Contoh
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() # Siapkan kueri SQL untuk UPDATE catatan yang diperlukan sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M') try: # Jalankan perintah SQL cursor.execute(sql) # Comit perubahan Anda di basis data db.commit() except: # Rollback jika ada error db.rollback() # putuskan koneksi dari server db.close() Operasi DELETE
Operasi DELETE diperlukan saat Anda ingin menghapus beberapa catatan dari basis data Anda. Berikut adalah prosedur untuk menghapus semua catatan dari EMPLOYEE di mana AGE lebih dari 20 −
Contoh
#!/usr/bin/python import MySQLdb # Buka koneksi basis data db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # siapkan objek kursor menggunakan metode cursor() cursor = db.cursor() # Siapkan kueri SQL untuk DELETE catatan yang diperlukan sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # Jalankan perintah SQL cursor.execute(sql) # Comit perubahan Anda di basis data db.commit() except: # Rollback jika ada error db.rollback() # putuskan koneksi dari server db.close() Melakukan Transaksi
Transaksi adalah mekanisme yang memastikan konsistensi data. Transaksi memiliki empat properti berikut −
Atomicity − Entah transaksi selesai atau tidak ada yang terjadi sama sekali.
Consistency − Transaksi harus dimulai dalam keadaan konsisten dan meninggalkan sistem dalam keadaan konsisten.
Isolation − Hasil perantara transaksi tidak terlihat di luar transaksi saat ini.
Durability − Setelah transaksi di-commit, efeknya persisten, bahkan setelah kegagalan sistem.
Python DB API 2.0 menyediakan dua metode untuk commit atau rollback transaksi.
Contoh
Anda sudah tahu cara mengimplementasikan transaksi. Berikut lagi contoh yang serupa −
# Siapkan kueri SQL untuk DELETE catatan yang diperlukan sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # Jalankan perintah SQL cursor.execute(sql) # Comit perubahan Anda di basis data db.commit() except: # Rollback jika ada error db.rollback()
Operasi COMMIT
Commit adalah operasi yang memberikan sinyal hijau kepada basis data untuk menyelesaikan perubahan, dan setelah operasi ini, tidak ada perubahan yang dapat dikembalikan.
Berikut adalah contoh sederhana untuk memanggil metode commit.
db.commit()
Operasi ROLLBACK
Jika Anda tidak puas dengan satu atau beberapa perubahan dan ingin mengembalikan perubahan tersebut sepenuhnya, gunakan metode rollback().
Berikut adalah contoh sederhana untuk memanggil metode rollback().
db.rollback()
Memutuskan Koneksi Basis Data
Untuk memutuskan koneksi basis data, gunakan metode close().
db.close()
Jika koneksi ke basis data ditutup oleh pengguna dengan metode close(), transaksi yang belum selesai akan di-rollback oleh basis data. Namun, alih-alih bergantung pada detail implementasi tingkat bawah basis data apa pun, aplikasi Anda akan lebih baik memanggil commit atau rollback secara eksplisit.
Menangani Error
Ada banyak sumber error. Beberapa contoh adalah error sintaks dalam pernyataan SQL yang dijalankan, kegagalan koneksi, atau memanggil metode fetch untuk handle pernyataan yang sudah dibatalkan atau selesai.
DB API mendefinisikan sejumlah error yang harus ada di setiap modul basis data. Tabel berikut mencantumkan exception ini.
| Sr.No. | Exception & Deskripsi |
| 1 | Warning Digunakan untuk masalah non-fatal. Harus merupakan subclass StandardError. |
| 2 | Error Kelas dasar untuk error. Harus merupakan subclass StandardError. |
| 3 | InterfaceError Digunakan untuk error dalam modul basis data, bukan basis data itu sendiri. Harus merupakan subclass Error. |
| 4 | DatabaseError Digunakan untuk error dalam basis data. Harus merupakan subclass Error. |
| 5 | DataError Subclass DatabaseError yang merujuk pada error dalam data. |
| 6 | OperationalError Subclass DatabaseError yang merujuk pada error seperti kehilangan koneksi ke basis data. Error ini biasanya di luar kendali pengembang Python. |
| 7 | IntegrityError Subclass DatabaseError untuk situasi yang akan merusak integritas relasional, seperti batasan keunikan atau kunci asing. |
| 8 | InternalError Subclass DatabaseError yang merujuk pada error internal modul basis data, seperti kursor yang tidak lagi aktif. |
| 9 | ProgrammingError Subclass DatabaseError yang merujuk pada error seperti nama tabel yang buruk dan hal lain yang dapat dengan aman disalahkan pada Anda. |
| 10 | NotSupportedError Subclass DatabaseError yang merujuk pada mencoba memanggil fungsionalitas yang tidak didukung. |
Skrip Python Anda harus menangani error ini, tetapi sebelum menggunakan salah satu exception di atas, pastikan MySQLdb Anda memiliki dukungan untuk exception tersebut. Anda dapat mendapatkan lebih banyak informasi tentangnya dengan membaca spesifikasi DB API 2.0.