摘要:是一個純實現的客戶端操作庫,支持事務存儲過程批量執行等。插入數據元組或列表插入數據字典批量插入參考資料中操作的模塊詳解之的使用原文地址更多文章請訪問我的個人博客
PyMySQL 是一個純 Python 實現的 MySQL 客戶端操作庫,支持事務、存儲過程、批量執行等。
PyMySQL 遵循 Python 數據庫 API v2.0 規范,并包含了 pure-Python MySQL 客戶端庫。
安裝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 |
read_default_file | Specifies my.cnf file to read these parameters from under the [client] section. |
conv | Conversion dictionary to use instead of the default one. This is used to provide custom marshalling and unmarshaling of types. |
use_unicode | Whether or not to default to unicode strings. This option defaults to true for Py3k. |
client_flag | Custom flags to send to MySQL. Find potential values in constants.CLIENT. |
cursorclass | 設置默認的游標類型 |
init_command | 當連接建立完成之后執行的初始化 SQL 語句 |
connect_timeout | 連接超時時間,默認 10,最小 1,最大 31536000 |
ssl | A dict of arguments similar to mysql_ssl_set()"s parameters. For now the capath and cipher arguments are not supported. |
read_default_group | Group to read from in the configuration file. |
compress | Not supported |
named_pipe | Not supported |
autocommit | 是否自動提交,默認不自動提交,參數值為 None 表示以服務器為準 |
local_infile | Boolean to enable the use of LOAD DATA LOCAL command. (default: False) |
max_allowed_packet | 發送給服務器的最大數據量,默認為 16MB |
defer_connect | 是否惰性連接,默認為立即連接 |
auth_plugin_map | A dict of plugin names to a class that processes that plugin. The class will take the Connection object as the argument to the constructor. The class needs an authenticate method taking an authentication packet as an argument. For the dialog plugin, a prompt(echo, prompt) method can be used (if no authenticate method) for returning a string from the user. (experimental) |
server_public_key | SHA256 authenticaiton plugin public key value. (default: None) |
db | 參數 database 的別名 |
passwd | 參數 password 的別名 |
binary_prefix | Add _binary prefix on bytes and bytearray. (default: False) |
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) 批量執行 SQL
# 獲取游標 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()完成對數據修改的提交。
獲取自增 IDcursor.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種游標類型:
Cursor: 默認,元組類型
DictCursor: 字典類型
DictCursorMixin: 支持自定義的游標類型,需先自定義才可使用
SSCursor: 無緩沖元組類型
SSDictCursor: 無緩沖字典類型
無緩沖游標類型,適用于數據量很大,一次性返回太慢,或者服務端帶寬較小時。源碼注釋:
Unbuffered Cursor, mainly useful for queries that return a lot of data, or for connections to remote servers over a slow network.Instead of copying every row of data into a buffer, this will fetch rows as needed. The upside of this is the client uses much less memory, and rows are returned much faster when traveling over a slow network
or if the result set is very big.There are limitations, though. The MySQL protocol doesn"t support returning the total number of rows, so the only way to tell how many rows there are is to iterate over every row returned. Also, it currently isn"t possible to scroll backwards, as only the current row is held in memory.
創建連接時,通過 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)事務處理
開啟事務
connection.begin()
提交修改
connection.commit()
回滾事務
connection.rollback()
防 SQL 注入轉義特殊字符
connection.escape_string(str)
參數化語句
支持傳入參數進行自動轉義、格式化 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), ])參考資料
Python中操作mysql的pymysql模塊詳解
Python之pymysql的使用
原文地址: https://shockerli.net/post/py...
更多文章請訪問我的個人博客: https://shockerli.net
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42040.html
摘要:一積累中如何快速查看包中的源碼最常用的大開發快捷鍵技巧將對象保存到文件中從文件中讀取對象中的用法的配置詳解和代碼的格式詳解格式化內容設置生成詳解注釋規范中設置內存調試的小知識單步執行命令的區別的動態代理機制詳解內容有瑕疵,樓指正泛型繼承的幾 一、積累 1.JAVA Eclipse中如何快速查看jar包中 的class源碼 最常用的15大Eclipse開發快捷鍵技巧 Java將對象保存到...
摘要:一積累中如何快速查看包中的源碼最常用的大開發快捷鍵技巧將對象保存到文件中從文件中讀取對象中的用法的配置詳解和代碼的格式詳解格式化內容設置生成詳解注釋規范中設置內存調試的小知識單步執行命令的區別的動態代理機制詳解內容有瑕疵,樓指正泛型繼承的幾 一、積累 1.JAVA Eclipse中如何快速查看jar包中 的class源碼 最常用的15大Eclipse開發快捷鍵技巧 Java將對象保存到...
摘要:一介紹是在版本中用于連接和操作服務器的一個庫引入方式二連接數據庫的完整流程引入模塊引入第三方庫創建連接對象用戶名密碼端口號默認為且此處為整數類型數據庫名連接地址使用連接對象創建游標對象游標對象是通過鏈接對象進行創 ...
閱讀 1292·2023-04-26 01:03
閱讀 1907·2021-11-23 09:51
閱讀 3299·2021-11-22 15:24
閱讀 2663·2021-09-22 15:18
閱讀 1010·2019-08-30 15:55
閱讀 3458·2019-08-30 15:54
閱讀 2234·2019-08-30 15:53
閱讀 2387·2019-08-30 15:44