Python - Akses Database MySQL

Standar Python untuk antarmuka database adalah Python DB-API. Sebagian besar antarmuka database Python mengikuti standar ini.

Anda dapat memilih database yang tepat untuk aplikasi Anda. Python Database API mendukung berbagai server database seperti -

  • GadFly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • Oracle
  • Sybase

Berikut adalah daftar antarmuka database Python yang tersedia: Python Database Interfaces dan API . Anda harus mengunduh modul DB API terpisah untuk setiap database yang perlu Anda akses. Misalnya, jika Anda perlu mengakses database Oracle serta database MySQL, Anda harus mendownload modul database Oracle dan MySQL.

DB API menyediakan standar minimal untuk bekerja dengan database menggunakan struktur dan sintaks Python jika memungkinkan. API ini meliputi:

  • Mengimpor modul API.
  • Mendapatkan koneksi dengan database.
  • Menerbitkan pernyataan SQL dan prosedur tersimpan.
  • Menutup koneksi

Kita akan mempelajari semua konsep menggunakan MySQL, jadi mari kita bahas tentang modul MySQLdb.

Apa itu MySQLdb?

MySQLdb adalah antarmuka untuk menghubungkan ke server database MySQL dari Python. Ini mengimplementasikan Python Database API v2.0 dan dibangun di atas MySQL C API.

Bagaimana cara menginstal MySQLdb?

Sebelum melanjutkan, pastikan Anda telah menginstal MySQLdb di komputer Anda. Cukup ketikkan yang berikut ini dalam skrip Python Anda dan jalankan -

#!/usr/bin/python

import MySQLdb

Jika menghasilkan hasil berikut, berarti modul MySQLdb tidak diinstal -

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 -

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

Note - Pastikan Anda memiliki hak root untuk menginstal modul di atas.

Koneksi Database

Sebelum menghubungkan ke database MySQL, pastikan hal-hal berikut -

  • Anda telah membuat TESTDB database.

  • Anda telah membuat tabel EMPLOYEE di TESTDB.

  • Tabel ini memiliki bidang FIRST_NAME, LAST_NAME, AGE, SEX dan INCOME.

  • ID pengguna "testuser" dan kata sandi "test123" disetel untuk mengakses TESTDB.

  • Modul Python MySQLdb diinstal dengan benar di komputer Anda.

  • Anda telah melalui tutorial MySQL untuk memahami Dasar-Dasar MySQL.

Contoh

Berikut adalah contoh koneksi dengan database MySQL "TESTDB"

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

Saat menjalankan skrip ini, ia menghasilkan hasil berikut di mesin Linux saya.

Database version : 5.0.45

Jika koneksi dibuat dengan sumber data, maka Objek Koneksi dikembalikan dan disimpan ke db untuk penggunaan lebih lanjut, jika tidak dbdisetel ke Tidak Ada. Lanjut,db objek digunakan untuk membuat cursorobjek, yang pada gilirannya digunakan untuk mengeksekusi kueri SQL. Akhirnya, sebelum keluar, ini memastikan bahwa koneksi database ditutup dan sumber daya dilepaskan.

Membuat Tabel Database

Setelah koneksi database dibuat, kita siap membuat tabel atau record ke dalam tabel database menggunakan execute metode kursor yang dibuat.

Contoh

Mari kita buat tabel Database EMPLOYEE -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

Operasi INSERT

Ini diperlukan ketika Anda ingin membuat rekaman Anda ke dalam tabel database.

Contoh

Contoh berikut, mengeksekusi pernyataan SQL INSERT untuk membuat record ke dalam tabel EMPLOYEE -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Contoh di atas dapat ditulis sebagai berikut untuk membuat kueri SQL secara dinamis -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Contoh

Segmen kode berikut adalah bentuk eksekusi lain di mana Anda dapat meneruskan parameter secara langsung -

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

BACA Operasi

Operasi BACA pada database apa pun berarti mengambil beberapa informasi berguna dari database.

Setelah koneksi database kami dibuat, Anda siap untuk membuat kueri ke dalam database ini. Anda bisa menggunakan keduanyafetchone() metode untuk mengambil rekaman tunggal atau fetchall() metode untuk menyesuaikan beberapa nilai dari tabel database.

  • fetchone()- Ini mengambil baris berikutnya dari kumpulan hasil kueri. Kumpulan hasil adalah objek yang dikembalikan saat objek kursor digunakan untuk membuat kueri tabel.

  • fetchall()- Ini mengambil semua baris dalam set hasil. Jika beberapa baris telah diekstraksi dari set hasil, maka ia mengambil baris yang tersisa dari set hasil.

  • rowcount - Ini adalah atribut hanya-baca dan mengembalikan jumlah baris yang dipengaruhi oleh metode execute ().

Contoh

Prosedur berikut menanyakan semua catatan dari tabel KARYAWAN yang memiliki gaji lebih dari 1000 -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

Ini akan menghasilkan hasil sebagai berikut -

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

Perbarui Operasi

UPDATE Operasi pada database apa pun berarti memperbarui satu atau lebih rekaman, yang sudah tersedia dalam database.

Prosedur berikut memperbarui semua catatan yang memiliki SEX sebagai 'M'. Di sini, kami menambah USIA semua pria satu tahun.

Contoh

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

HAPUS Operasi

Operasi HAPUS diperlukan saat Anda ingin menghapus beberapa rekaman dari database Anda. Berikut adalah prosedur untuk menghapus semua record dari KARYAWAN di mana USIA lebih dari 20 -

Contoh

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

Melakukan Transaksi

Transaksi adalah mekanisme yang memastikan konsistensi data. Transaksi memiliki empat properti berikut -

  • Atomicity - Transaksi selesai atau tidak terjadi sama sekali.

  • Consistency - Sebuah transaksi harus dimulai dalam keadaan yang konsisten dan membiarkan sistem dalam keadaan yang konsisten.

  • Isolation - Hasil antara transaksi tidak terlihat di luar transaksi saat ini.

  • Durability - Setelah transaksi dilakukan, efeknya tetap ada, bahkan setelah kegagalan sistem.

Python DB API 2.0 menyediakan dua metode baik melakukan atau rollback transaksi.

Contoh

Anda sudah tahu cara mengimplementasikan transaksi. Ini lagi contoh serupa -

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

Operasi COMMIT

Komit adalah operasi, yang memberikan sinyal hijau ke database untuk menyelesaikan perubahan, dan setelah operasi ini, tidak ada perubahan yang dapat dikembalikan.

Berikut adalah contoh sederhana untuk menelepon commit metode.

db.commit()

Operasi ROLLBACK

Jika Anda tidak puas dengan satu atau beberapa perubahan dan Anda ingin mengembalikan perubahan itu sepenuhnya, gunakan rollback() metode.

Berikut adalah contoh sederhana untuk menelepon rollback() metode.

db.rollback()

Memutus Database

Untuk memutuskan koneksi Database, gunakan metode close ().

db.close()

Jika koneksi ke database ditutup oleh pengguna dengan metode close (), setiap transaksi yang belum diselesaikan akan dibatalkan oleh DB. Namun, daripada bergantung pada detail implementasi tingkat bawah DB, aplikasi Anda akan lebih baik memanggil commit atau rollback secara eksplisit.

Penanganan Error

Ada banyak sumber kesalahan. Beberapa contoh adalah kesalahan sintaks dalam pernyataan SQL yang dieksekusi, kegagalan koneksi, atau memanggil metode pengambilan untuk pegangan pernyataan yang sudah dibatalkan atau selesai.

DB API mendefinisikan sejumlah kesalahan yang harus ada di setiap modul database. Tabel berikut mencantumkan pengecualian ini.

Sr.No. Pengecualian & Deskripsi
1

Warning

Digunakan untuk masalah non-fatal. Harus membuat subclass StandardError.

2

Error

Kelas dasar untuk kesalahan. Harus membuat subclass StandardError.

3

InterfaceError

Digunakan untuk kesalahan dalam modul database, bukan database itu sendiri. Harus subclass Error.

4

DatabaseError

Digunakan untuk kesalahan dalam database. Harus subclass Error.

5

DataError

Subclass DatabaseError yang mengacu pada kesalahan dalam data.

6

OperationalError

Subclass DatabaseError yang merujuk ke kesalahan seperti hilangnya koneksi ke database. Kesalahan ini umumnya di luar kendali skrip Python.

7

IntegrityError

Subclass DatabaseError untuk situasi yang akan merusak integritas relasional, seperti batasan keunikan atau kunci asing.

8

InternalError

Subkelas DatabaseError yang merujuk ke kesalahan internal modul database, seperti kursor tidak lagi aktif.

9

ProgrammingError

Subkelas DatabaseError yang merujuk ke kesalahan seperti nama tabel yang buruk dan hal-hal lain yang dapat disalahkan dengan aman kepada Anda.

10

NotSupportedError

Subkelas DatabaseError yang merujuk pada mencoba memanggil fungsionalitas yang tidak didukung.

Skrip Python Anda harus menangani kesalahan ini, tetapi sebelum menggunakan salah satu pengecualian di atas, pastikan MySQLdb Anda memiliki dukungan untuk pengecualian itu. Anda bisa mendapatkan lebih banyak informasi tentang mereka dengan membaca spesifikasi DB API 2.0.