來源: Shocker 連接:
https://shockerli.net/post/python3-pymysql/html
PyMySQL 是一個純 Python 實現的 MySQL 客戶端操做庫,支持事務、存儲過程、批量執行等。python
PyMySQL 遵循 Python 數據庫 API v2.0 規範,幷包含了 pure-Python MySQL 客戶端庫。mysql
安裝sql
pip install PyMySQL
建立數據庫鏈接數據庫
import pymysql connection = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='demo', charset='utf8')
參數列表:安全
參數 描述 host 數據庫服務器地址,默認 localhost user 用戶名,默認爲當前程序運行用戶 password 登陸密碼,默認爲空字符串 database 默認操做的數據庫 port 數據庫端口,默認爲 3306 bind_address 當客戶端有多個網絡接口時,指定鏈接到主機的接口。參數能夠是主機名或IP地址。 unix_socket unix 套接字地址,區別於 host 鏈接 read_timeout 讀取數據超時時間,單位秒,默認無限制 write_timeout 寫入數據超時時間,單位秒,默認無限制 charset 數據庫編碼 sql_mode 指定默認的 SQL_MODE cursorclass 設置默認的遊標類型 init_command 當鏈接創建完成以後執行的初始化 SQL 語句 connect_timeout 鏈接超時時間,默認 10,最小 1,最大 31536000 autocommit 是否自動提交,默認不自動提交,參數值爲 None 表示以服務器爲準 local_infile Boolean to enable the use of LOAD DATA LOCAL command. (default: False) max_allowed_packet 發送給服務器的最大數據量,默認爲 16MB defer_connect 是否惰性鏈接,默認爲當即鏈接 db 參數 database 的別名 passwd 參數 password 的別名 binary_prefix Add _binary prefix on bytes and bytearray. (default: False)
執行 SQL服務器
cursor.execute(sql, args) 執行單條 SQL網絡
# 獲取遊標 cursor = connection.cursor() # 建立數據表 effect_row = cursor.execute(''' CREATE TABLE `users` ( `name` varchar(32) NOT NULL, `age` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ''') # 插入數據(元組或列表) effect_row = cursor.execute('INSERT INTO `users` (`name`, `age`) VALUES (%s, %s)', ('mary', 18)) # 插入數據(字典) info = {'name': 'fake', 'age': 15} effect_row = cursor.execute('INSERT INTO `users` (`name`, `age`) VALUES (%(name)s, %(age)s)', info) connection.commit()
executemany(sql, args) 批量執行 SQLsocket
# 獲取遊標 cursor = connection.cursor() # 批量插入 effect_row = cursor.executemany( 'INSERT INTO `users` (`name`, `age`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE age=VALUES(age)', [ ('hello', 13), ('fake', 28), ]) connection.commit()
注意:INSERT、UPDATE、DELETE 等修改數據的語句需手動執行connection.commit()完成對數據修改的提交。post
獲取自增 ID
cursor.lastrowid
查詢數據
# 執行查詢 SQL cursor.execute('SELECT * FROM `users`') # 獲取單條數據 cursor.fetchone() # 獲取前N條數據 cursor.fetchmany(3) # 獲取全部數據 cursor.fetchall()
遊標控制
全部的數據查詢操做均基於遊標,咱們能夠經過cursor.scroll(num, mode)控制遊標的位置
cursor.scroll(1, mode='relative') # 相對當前位置移動 cursor.scroll(2, mode='absolute') # 相對絕對位置移動
設置遊標類型
查詢時,默認返回的數據類型爲元組,能夠自定義設置返回類型。支持5種遊標類型:
無緩衝遊標類型,適用於數據量很大,一次性返回太慢,或者服務端帶寬較小時。
建立鏈接時,經過 cursorclass 參數指定類型:
connection = pymysql.connect(host='localhost', user='root', password='root', db='demo', charset='utf8', cursorclass=pymysql.cursors.DictCursor)
也能夠在建立遊標時指定類型:
cursor = connection.cursor(cursor=pymysql.cursors.DictCursor)
事務處理
防 SQL 注入
參數化語句 支持傳入參數進行自動轉義、格式化 SQL 語句,以免 SQL 注入等安全問題。
# 插入數據(元組或列表)
effect_row = cursor.execute('INSERT INTO users
(name
, age
) VALUES (%s, %s)', ('mary', 18))
# 插入數據(字典)
info = {'name': 'fake', 'age': 15}
effect_row = cursor.execute('INSERT INTO users
(name
, age
) VALUES (%(name)s, %(age)s)', info)
# 批量插入
effect_row = cursor.executemany(
'INSERT INTO users
(name
, age
) VALUES (%s, %s) ON DUPLICATE KEY UPDATE age=VALUES(age)', [
('hello', 13),
('fake', 28),
])
參考資料