pymysql
1、概要
PyMySQL 是在 Python3.x 版本中用於鏈接 MySQL 服務器的一個庫,python
2、PyMySQL 安裝
pip install pymysqlmysql
3、操做流程
- 建立connection
- 獲取cursor
- 執行增刪改查的操做
- 處理數據
- 關閉cursor
- 關閉connection
4、核心類介紹
一、建立connection
-
說明sql
-
語法格式數據庫
conn = pymysql.connect(host=None, user=None, password="", database=None, port=0, db=None,charset='')
-
經常使用參數說明服務器
參數名 類型 說明 host String MySQL的服務器地址 port int MySQL的端口號 user String 用戶名 passwd String 密碼 db String 使用的數據庫 charset String 鏈接字符集 -
返回值markdown
cursor網絡
-
示例代碼app
HOST = '127.0.0.1' PORT = 3306 USER = 'root' PASSWD = 'root' DB = 'python' CHARSET = 'utf8' connection = pymysql.connect(host=HOST, port=PORT, user=USER, passwd=PASSWD, db=DB, charset=CHARSET)
-
其它方法socket
方法 描述 begin() 開啓事務 commit() 提交事務 cursor(cursor=None) 建立一個遊標用來執行語句 ping(reconnect=True) 檢查鏈接是否存活,會從新發起鏈接 rollback() 回滾事務 close() 關閉鏈接 select_db(db) 選擇數據庫 show_warnings() 查看warning信息 -
詳細tcp
- host – 數據庫服務器所在的主機。
- user – 登陸用戶名。
- password – 登陸用戶密碼。
- database – 鏈接的數據庫。
- port – 數據庫開放的端口。(默認: 3306)
- bind_address – 當客戶端有多個網絡接口時,請指定鏈接到主機的接口,參數能夠是主機名或IP地址。
- unix_socket – 使用unix套接字而不是tcp/ip。
- charset – 鏈接字符集。
- sql_mode – 默認SQL模式。
- read_default_file – 指定my.cnf文件路徑,以便從[client]部分讀取參數。
- conv – 要使用的轉換字典,而不是默認值。
- use_unicode – 是否默認爲unicode字符串,對於Py3k,此選項默認爲true。
- client_flag – 發送到MySQL的自定義標誌。
- cursorclass – 使用自定義的遊標類。
- init_command – 創建鏈接時要運行的初始SQL語句。
- connect_timeout – 創建鏈接超時時間。(默認: 10,最小: 1,最大: 31536000)
- read_default_group – 從配置文件中讀取組。
- compress – 不支持
- named_pipe – 不支持
- autocommit – 設置自動提交模式,不設置意味着使用數據庫默認。(默認值: False)
- local_infile – 是否啓用「LOAD LOCAL INFILE」命令的使用。(默認值: False)
- max_allowed_packet – 發送到服務器的數據包的最大大小 (以字節爲單位,默認值: 16MB),僅用於限制小於默認值 (16KB) 的 「LOAD LOCAL INFILE」 數據包的大小。
- defer_connect – 不要顯式鏈接建設,等待鏈接調用。(默認值: False)
- db – 鏈接數據庫別名(兼容MySQLdb)
- passwd – 密碼輸入別名(兼容MySQLdb)
- binary_prefix – 在bytes和bytearray上添加_binary前綴(默認: False)
二、獲取cursor對象
-
說明
遊標對象,用於執行查詢和獲取結果
-
核心方法
方法名 說明 execute() 用於執行一個數據庫的查詢命令 fetchone() 獲取結果集中的下一行 fetchmany(size) 獲取結果集中的下(size)行 fetchall() 獲取結果集中剩下的全部行 rowcount 最近一次execute返回數據/影響的行數 close() 關閉遊標 -
舉個栗子
一、執行查詢功能
with connection.cursor() as cursor: sql = 'select * from home_user' cursor.execute(sql) results = cursor.fetchall() connection.commit() for results in results: uid = results[0] name = results[1] password = results[2] print('==========用戶信息===============') print('用戶id: {id} \n用戶名: {name}\n密碼: {pwd}'.format(id=uid, name=name, pwd=password))
-
詳細
方法 描述 close() 關閉遊標。 execute(query, args=None) 執行單條語句,傳入須要執行的語句,是string類型;同時能夠給查詢傳入參數,參數能夠是tuple、list或dict。執行完成後,會返回執行語句的影響行數,若是有的話。 executemany(query, args) 執行多條INSERT語句,傳入須要執行的語句;同時能夠給查詢傳入參數,參數是一個mappings序列。執行完成後,會返回執行語句的影響行數,若是有的話。 fetchone() 獲取下一行數據。 fetchall() 獲取全部數據。 fetchmany(size=None) 獲取幾行數據。 read_next() 獲取下一行數據。 callproc() 用來調用存儲過程。 mogrify() 參數化查詢,防止SQL注入。 scroll(num,mode) 移動遊標位置。
5、基本操做
查詢數據
-
分頁查詢操做
def find_by_page(page, size): with pymysql.connect(host=HOST, port=PORT, user=USER, passwd=PASSWORD, charset=CHARSET, db=DB_NAME) as cursor: sql = "SELECT * FROM t_addr LIMIT{},{}".format((page - 1) * size, size) cursor.execute(sql) user = cursor.fetchall()
事務操做
-
示例代碼
conn = pymysql.connect( host='10.10.0.109', port=3306, user='mha', password='123456', database='sbtest', charset='utf8' ) cursor = conn.cursor() # 插入sql; sql_insert = "insert into t_user (userid,username) values (10,'user10')" # 更新sql; sql_update = "update t_user set username = 'name91' where userid=9" # 刪除sql; sql_delete = "delete from t_user where userid < 3" # 把一個事務放到一個try塊裏,若是出現異常就回滾; try: # 開啓事務; conn.begin() cursor.execute(sql_insert) print(cursor.rowcount) cursor.execute(sql_update) print(cursor.rowcount) cursor.execute(sql_delete) print(cursor.rowcount) # 提交事務; conn.commit() except Exception as e: # 如有異常就回滾; conn.rollback() cursor.close() conn.close()
批量插入
-
示例代碼
# 測試事務 批量添加 def test_batch_insert(): conn = pymysql.connect(host=HOST, port=PORT, user=USER, passwd=PASSWORD, charset=CHARSET, db=DB_NAME) cursor = conn.cursor() try: sql = 'INSERT INTO t_addr(PROVICE, CITY, COUNTY, DEATIL, USERID) VALUES (%s,%s,%s,%s,%s)' li = [] for i in range(50): li.append(('湖北省', '武漢市', '高新區' + str(i), '智慧園2135', 6)) # 開啓事物 conn.begin() cursor.executemany(sql, li) # 提交 conn.commit() except Exception as e: conn.rollback() print(e) # 報錯事務回滾 finally: # 關閉鏈接 cursor.close() conn.close()