Latest web development tutorials

operasi python database MySQL

Python antarmuka database standar untuk Python DB-API, Python DB-API menyediakan antarmuka pemrograman aplikasi database untuk pengembang.

Database Python antarmuka mendukung database yang sangat besar, Anda dapat memilih proyek database Anda:

  • pengganggu
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • peramal
  • Sybase

Anda dapat mengakses antarmuka database Python dan API Lihat daftar rinci database didukung.

database yang berbeda Anda perlu men-download modul DB API yang berbeda, misalnya, Anda perlu mengakses database Oracle dan data Mysql, Anda perlu men-download Oracle dan MySQL modul basis data.

DB-API adalah spesifikasi yang mendefinisikan satu set objek dan database harus mengakses mode, dalam rangka untuk menyediakan antarmuka yang konsisten untuk mengakses database untuk berbagai sistem dan berbagai program antarmuka database.

Python DB-API, untuk sebagian besar database mengimplementasikan antarmuka, menggunakannya setelah menghubungkan database, Anda dapat menggunakan cara yang sama setiap database.

Python DB-API menggunakan proses:

  • Pengenalan modul API.
  • Bisa terhubung ke database.
  • Mengeksekusi pernyataan SQL dan prosedur yang tersimpan.
  • Menutup koneksi database.

Apa MySQLdb?

MySQLdb adalah sebuah antarmuka untuk Python Mysql link database, yang mengimplementasikan Python database API spesifikasi V2.0, berdasarkan pembentukan API MySQL C.


Cara menginstal MySQLdb?

Untuk menulis skrip MySQL dengan DB-API, Anda harus memastikan bahwa Anda telah menginstal MySQL. Salin kode berikut, dan jalankan:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

Jika output adalah sebagai berikut setelah eksekusi, yang berarti Anda tidak memiliki modul MySQLdb diinstal:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

Instal MySQLdb, kunjungi http://sourceforge.net/projects/mysql-python , (platform Linux dapat diakses: https://pypi.python.org/pypi/MySQL-python ) Dari sini memilih untuk platform Anda paket instalasi, pre-dikompilasi ke binari dan paket kode sumber.

Jika Anda memilih versi rilis biner, proses instalasi meminta untuk menyelesaikan instalasi dasar. Jika menginstal dari source code, Anda perlu beralih ke MySQLdb direktori rilis tingkat atas, dan ketik perintah berikut:

$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install

Catatan: Pastikan Anda memiliki hak akses root untuk menginstal modul yang dijelaskan di atas.


database Connectivity

Sebelum menghubungkan ke database, pastikan item berikut:

  • Anda telah membuat testdb basis data.
  • Dalam database testdb Anda telah membuat tabel EMPLOYEE
  • KARYAWAN bidang meja FIRST_NAME, LAST_NAME, AGE, SEX dan PENGHASILAN.
  • Pengguna terhubung ke database menggunakan testdb bernama "testuser", password "test123", Anda dapat mengatur sendiri langsung atau akar nama pengguna dan password Anda, lisensi database pengguna Mysql, silakan gunakan perintah Grant.
  • Pada mesin Anda sudah terinstal modul Python MySQLdb.
  • Jika Anda tidak akrab dengan pernyataan sql, Anda dapat mengunjungi kami secara SQL tutorial

contoh:

Contoh-contoh berikut link database testdb Mysql:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

Pelaksanaan script di atas output hasil adalah sebagai berikut:

Database version : 5.0.45

Membuat tabel database

Jika koneksi database ada, kita dapat menggunakan metode mengeksekusi () untuk membuat tabel untuk database, membuat KARYAWAN meja ditampilkan sebagai berikut:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

database insert

Contoh berikut menggunakan mengeksekusi pernyataan SQL INSERT untuk memasukkan catatan ke KARYAWAN meja:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# 关闭数据库连接
db.close()

Contoh di atas juga dapat ditulis sebagai berikut:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

contoh:

Kode berikut menggunakan variabel untuk melewatkan parameter ke sebuah pernyataan SQL:

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

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

query database

Python Mysql query menggunakan metode fetchone () untuk mendapatkan data tunggal menggunakan fetchAll metode () untuk mendapatkan sejumlah data.

  • fetchone (): Metode ini mendapat berikutnya hasil query set.Set hasil target
  • fetchAll (): mengembalikan hasilnya untuk menerima semua baris.
  • rowcount: Ini adalah atribut read-only, dan mengembalikan eksekusi melaksanakan metode () setelah jumlah baris yang dipengaruhi.

contoh:

Pilihan KARYAWAN meja gaji (upah) data lapangan lebih besar dari semua 1000:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # 打印结果
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# 关闭数据库连接
db.close()

Hasil eksekusi script di atas adalah sebagai berikut:

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

update database

Data memperbarui operasi untuk memperbarui tabel data, contoh berikut akan testdb bidang SEX meja semua perubahan 'M', bidang AGE nilainya 1:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

penghapusan

Menghapus data menghapus data untuk meja, contoh berikut menunjukkan menghapus data dalam tabel EMPLOYEE lebih besar dari semua AGE Data 20:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭连接
db.close()

Urusan eksekutif

mekanisme transaksi untuk memastikan konsistensi data.

Jasa harus memiliki empat sifat: atomicity, konsistensi, isolasi, daya tahan. Keempat sifat sering disebut sebagai sifat ACID.

  • Atom (atomicity). Sebuah transaksi adalah unit terpisahkan dari pekerjaan, operasi tersebut termasuk dalam transaksi baik melakukan atau tidak melakukan.
  • Konsistensi (konsistensi). Layanan harus diubah untuk membuat database dari satu negara yang konsisten untuk negara yang konsisten lain. Konsistensi dan atomicity yang erat terkait.
  • Isolasi (isolasi). Mengeksekusi transaksi tidak bisa transaksi lainnya gangguan. Itu adalah transaksi operasi internal dan penggunaan concurrency data transaksi lainnya terisolasi dan tidak dapat mengganggu satu sama lain antara transaksi individual mengeksekusi secara bersamaan.
  • Kegigihan (daya tahan). Persistent juga disebut permanen (permanen), itu berarti bahwa sekali transaksi melakukan, mengubah data dalam database harus permanen. Berikut operasi lain atau kegagalan seharusnya tidak memiliki dampak apapun.

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

contoh:

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

Untuk database transaksional, pemrograman database dengan Python, ketika kursor didirikan, otomatis dimulai transaksi database terlihat.

komit metode () untuk semua metode update kursor, rollback () untuk memutar kembali semua operasi dari kursor saat ini. Setiap metode telah memulai bisnis baru.


Penanganan kesalahan

DB API mendefinisikan sejumlah kesalahan dan operasi abnormal dari database, tabel berikut berisi daftar kesalahan dan pengecualian:

abnormal deskripsi
peringatan Ketika ada peringatan serius untuk memicu, seperti memasukkan data terpotong, dan sebagainya. Ini harus menjadi subclass dari StandardError.
kesalahan Semua kelas kesalahan lain selain peringatan. Ini harus menjadi subclass dari StandardError.
InterfaceError Kebakaran ketika modul antarmuka database memiliki kesalahan sendiri (bukan database error) terjadi. Ini harus menjadi subclass dari Kesalahan.
DatabaseError Memicu dan kesalahan yang berhubungan dengan database. Ini harus menjadi subclass dari Kesalahan.
DataError Ketika ada terjadi kesalahan pengolahan data bila dipicu, misalnya: membagi dengan nol kesalahan, data dari jangkauan, dan sebagainya. Ini harus menjadi subclass dari DatabaseError.
OperationalError Hal ini mengacu pada non-pengguna dikontrol, tapi kesalahan terjadi saat database. Sebagai contoh: sengaja terputus, nama database tidak ditemukan, transaksi gagal, kesalahan alokasi memori, terjadi dll operasi database error. Ini harus menjadi subclass dari DatabaseError.
IntegrityError Terkait integritas kesalahan, seperti cek kunci asing gagal dan sejenisnya. Itu harus DatabaseError subclass.
internalerror error database internal, seperti kursor (kursor) gagal, sinkronisasi transaksi gagal dan sebagainya. Itu harus DatabaseError subclass.
ProgrammingError kesalahan prosedural, seperti tabel data (tabel) tidak ditemukan atau sudah ada, pernyataan SQL syntax error, jumlah kesalahan parameter, dan sebagainya. Ini harus menjadi subclass dari DatabaseError.
NotSupportedError Tidak didukung error, mengacu pada penggunaan fungsi seperti API atau database tidak mendukung. Misalnya, menggunakan .rollback pada fungsi koneksi objek (), tetapi database tidak mendukung transaksi atau transaksi telah ditutup. Ini harus menjadi subclass dari DatabaseError.