1. 程式人生 > 資料庫 >Python操作MySQL資料庫例項詳解【安裝、連線、增刪改查等】

Python操作MySQL資料庫例項詳解【安裝、連線、增刪改查等】

本文例項講述了Python操作MySQL資料庫。分享給大家供大家參考,具體如下:

1、安裝

通過Python連線MySQL資料庫有很多庫,這裡使用官方推薦的MySQL Connector/Python庫,其官網為:https://dev.mysql.com/doc/connector-python/en/。

通過pip命令安裝:

pip install mysql-connector-python

預設安裝的是最新的版本,我安裝的是8.0.17,對應MySQL的8.0版本。MySQL統一了其相關工具的大版本號,必須相同或更高才可以相容。例如我使用的是MySQL8.0,如果使用低於8的mysql-connector就會報錯。事實上也是這樣,在某些舊的文件中提示安裝pip install mysql-connector,就會安裝較低的版本,在連線MySQL時,會報錯如下:

mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported

這是由於mysql8.0使用了Use Strong Password Encryption for Authentication即強密碼加密,而低版本的mysql-connector採用舊的mysql_native_password加密方式,導致無法連線,因此注意使用和資料庫相相容的版本。

2、連線

可以通過connector類的connect()方法進行資料庫的連線,傳入伺服器、埠號、使用者名稱、密碼、資料庫等引數,其中伺服器與埠號可省略,預設為localhost:3306。

import mysql.connector
db = mysql.connector.connect(
  host='localhost',port='3306',user="root",password="123456",database="test"
)

3、資料庫、表操作

對資料庫、資料表的操作屬於模式定義語言(DDL),所有DDL語句的執行都是依賴於一個叫cursor的資料結構進行操作的。通過從connect物件中獲取cursor物件後就可以進行資料庫、表的相關操作了。例如建立一個數據庫、資料表

# 獲取資料庫的cursor
cursor = db.cursor()
# 建立資料庫
cursor.execute("CREATE DATABASE mydatabase")
# 建立資料表
dbcursor.execute("CREATE TABLE customers (name varchar(255),address varchar(255))")
# 修改表操作
dbcursor.execute('ALTER TABLE customers ADD COLUMN id INT PRIMARY KEY AUTO_INCREMENT')
# 查詢並列印資料庫中的所有表
cursor.execute("show tables")
for table in cursor:
  print(table)

4、增刪改

插入、刪除、修改操作依舊是通過cursor物件來實現,通過cursor的execute()方法執行SQL操作,第一個引數是要執行的SQL語句,第二個引數是語句中要填充的變數。

在執行完所有的SQL操作後記得要通過資料庫物件的commit()將操作事務提交到資料庫,如果需要撤銷則通過rollback()方法回滾操作。

SQL語句中的變數可以用%s的形式作為佔位符,然後再以python中元組的形式在執行時將變數填入,如下所示:

值得注意的是無論是什麼型別的資料在傳入時都被當做字串型別,然後在執行SQL操作時會將字串轉化為相應的型別,因此此處的佔位符都是%s,而沒有%d、%f等。

# 要執行的SQL語句
sql = "INSERT INTO customers (name,address) VALUES (%s,%s)"
# 以元組的形式填入資料
val = ('Mike','Main street 20')
# 執行操作
cursor.execute(sql,val)
# 提交事務
db.commit()

也可以用python中字典的形式填充變數,在SQL語句中的佔位符需要使用對應的變數名

# 在SQL語句中指明變數名
sql = "INSERT INTO customers (name,address) VALUES (%(name)s,%(address)s)"
# 以字典的形式填入資料
val = {
  'name': 'Alice','address': 'Center street 22'
}
cursor.execute(sql,val)

如果需要一次插入多條資料,可以使用executemany()方法,將多條資料以陣列的方式傳給第二個引數。

通過cursor的rowcount屬性可以返回成功操作的資料條數,lastrowid屬性是最後一個成功插入的行的id

sql = "INSERT INTO customers (name,%s)"
# 以陣列的形式填充資料
val = [
 ('Peter','Lowstreet 4'),('Amy','Apple st 652'),('Hannah','Mountain 21'),]
cursor.executemany(sql,val)
print("成功插入%d條資料,最後一條的id為:%d" % (cursor.rowcount,cursor.lastrowid))

修改、刪除資料的方法與插入類似,只需要把對應的SQL語句和變數值傳給execute()函式即可。可以看出MySQL-connector庫的操作是非常貼近原生SQL語言的。

# 修改資料
sql = "UPDATE customers SET address=%s WHERE name=%s"
val = ('Center street 21','Mike')
cursor.execute(sql,val)
# 刪除資料
sql = "DELETE FROM customers WHERE name=%s"
val = ('Hannah',)
cursor.execute(sql,val)

5、查詢

執行查詢操作和之前類似,都是通過execute()執行對應的SQL語句,在執行時將相應的資料填入即可。查詢結束後,結果集會儲存在cursor當中,可以直接把cursor當作迭代器iterator來進行展開取得結果集中每條資料的對應欄位。也可以通過cursor的fetchall()、fetchone()方法取得所有或一條結果集。

# 查詢customers表中id介於6到8之間的資料並返回name、address欄位
query = "SELECT name,address FROM customers WHERE id BETWEEN %s AND %s"
cursor.execute(query,(6,8))
# 迴圈取出結果集中的每條資料並列印
for (name,address) in cursor:
  print("%s家的地址是%s" % (name,address))
# 輸出結果為:
# Peter家的地址是Lowstreet 4
# Amy家的地址是Apple st 652
# Hannah家的地址是Mountain 21

通過原生的SQL語句可以進行更為複雜的查詢操作,例如通過where設定查詢條件、Order by進行欄位排序、Limit設定返回結果條數、OFFSET查詢結果集的偏移、Join進行表連線操作

更多關於Python相關內容感興趣的讀者可檢視本站專題:《Python常見資料庫操作技巧彙總》、《Python數學運算技巧總結》、《Python資料結構與演算法教程》、《Python函式使用技巧總結》、《Python字串操作技巧彙總》、《Python入門與進階經典教程》及《Python檔案與目錄操作技巧彙總》

希望本文所述對大家Python程式設計有所幫助。