Latest web development tutorials

koneksi database MySQL Python3

Dalam tulisan ini, kami memperkenalkan Python3 penggunaan PyMySQL terhubung ke database, dan CRUD sederhana.

Apa PyMySQL?

PyMySQL untuk koneksi database MySQL versi server di Python3.x, python2 digunakan mysqldb.

PyMySQL ikuti Python database API v2.0 spesifikasi dan berisi client library MySQL-Python murni.


instalasi PyMySQL

Sebelum menggunakan PyMySQL, kita perlu memastikan PyMySQL diinstal.

PyMySQL Download: https: //github.com/PyMySQL/PyMySQL.

Jika belum terinstal, kita dapat menggunakan perintah berikut untuk menginstal versi terbaru dari PyMySQL:

$ pip install PyMySQL

Jika sistem Anda tidak mendukung perintah pip, Anda dapat menggunakan berikut diinstal:

1, menggunakan perintah git untuk men-download paket instalasi (Anda juga dapat secara manual men-download):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2, jika Anda perlu untuk mengembangkan nomor versi, Anda dapat menggunakan perintah curl untuk menginstal:

$ # X.X 为 PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录

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

Proses instalasi mungkin muncul "ImportError: Tidak ada modul bernama setuptools" pesan kesalahan, yang berarti Anda tidak perlu menginstal setuptools, Anda dapat mengakses https://pypi.python.org/pypi/setuptools menemukan metode instalasi masing-masing sistem.

instalasi Linux Contoh:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

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/python3

import pymysql

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

# 使用 cursor() 方法创建一个游标对象 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.5.20-log

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/python3

import pymysql

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

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
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/python3

import pymysql

# 打开数据库连接
db = pymysql.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:
   # 如果发生错误则回滚
   db.rollback()

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

Contoh di atas juga dapat ditulis sebagai berikut:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.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)
   # 执行sql语句
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

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

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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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.