您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“python數據庫操作之PyMysql怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python數據庫操作之PyMysql怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在編寫小腳本時,PyMysql是快速連接并操作數據庫的一個不錯選擇。
pip3 install PyMysql # 可使用 pip list 查看此環境安裝了哪些第三方庫 pip list | grep PyMysql
import pymysql
使用connect函數創建連接對象,此連接對象提供關閉數據庫、事務回滾等操作
一般傳參為:host, user, password, port(默認為3306), database(想要連接的數據庫名)
db = pymysql.connect(host='127.0.0.1', user='root', password='pwd', database='database_name')
連接對象的常見方法:
方法名 | 說明 |
---|---|
cursor() | 獲取游標對象,操作數據庫,如執行DML操作,調用存儲過程等 |
commit() | 提交事務 |
rollback() | 回滾事務 |
close() | 關閉數據庫連接 |
操作數據庫主要使用cursor游標對象,對數據庫進行操作
cursor游標對象的常見方法
方法名 | 說明 |
---|---|
close() | 關閉當前游標對象 |
execute(query) | 執行數據庫操作,如sql語句或數據庫命令 |
executemany(query,params) | 用于批量操作,如:批量更新 |
fetchone() | 獲取查詢結果集中的下一條記錄 |
fetchmany(size) | 獲取查詢結果集中指定數量的記錄,size默認為1 |
fetchall() | 獲取查詢結果集中所有記錄 |
nextset() | 跳至下一個可用的結果集 |
fetchone(),fetchmany(size),fetchall() 三者的返回值都是元組 或 元組的嵌套 查
查詢主要獲取結果集,注意fetchone 得到的是元組, fetchmany(size),fetchall()得到的是元組的嵌套
注意:
如果既要使用python的字符串解析%,sql語句中又包含sql的模糊查詢占位符%, 模糊查詢使用%%即可,這樣不會報錯
import pymysql # 創建數據庫連接對象 db = pymysql.connect(host='127.0.0.1', user='root', password='pwd', database='database_name') # 創建游標對象 cursor = db.cursor() table_name = 'map_point' sql = "SELECT * FROM %s WHERE username LIKE 'DL%%' " % table_name try: cursor.execute(sql) # 執行sql語句,也可執行數據庫命令,如:show tables result = cursor.fetchall() # 所有結果 print(result) except Exception as e: db.rollback() print("查詢失敗") print(e) finally: cursor.close() # 關閉當前游標 db.close() # 關閉數據庫連接
循環查詢:
在一些場景中,需要進行循環查詢,判斷,此時在執行完execute查詢語句后,務必進行commit提交,否則每次查詢到的數據都是之前查詢結果的快照,也就是舊數據。
或者采用第二種方案,創建connect連接時,增添autocommit=True屬性,自動進行commit提交。
增,刪,改
增刪改需要有提交事務的操作,查不需要提交事務,但如果循環查詢,務必提交事務,否則結果都是重復的
創建連接對象——db= pymysql()
創建cursor游標對象——cur = db.cursor()
數據操作——cur.execute(sql)
提交連接事務——db.commit()
關閉cursor游標對象——cur.close()
關閉連接對象——db.close( )
import pymysql # 創建數據庫連接對象 db = pymysql.connect(host='127.0.0.1', user='root', password='pwd', database='database_name') # 創建游標對象 cursor = db.cursor() table_name = 'table_name ' user_id = 'yyy' user_no = 'xxx' sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, user_no, user_id) try: cursor.execute(sql) # 執行sql語句,也可執行數據庫命令,如:show tables db.commit() # 增刪改,必須執行事務 print("數據更新成功") except Exception as e: db.rollback() # 若出現失敗,進行回滾 print("數據更新失敗") print(e) finally: cursor.close() # 關閉當前游標 db.close() # 關閉數據庫連接
使用循環批量更新
db = pymysql.connect(host='127.0.0.1', user='root', password='pwd', database='database_name') table_name = 'table_name' update_list = ['xxx2', 'xxxx3'] condition_list = ['xxx', 'xxx1'] # 條件集合,更新集合長度相等時可使用,可根據其他情況重新編寫 cursor = db.cursor() for i in range(len(condition_list)): sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, update_list[i], condition_list[i]) print('執行sql語句:' + sql) try: cursor.execute(sql) db.commit() print("數據更新成功" + str(i+1) + '條') except Exception as e: db.rollback() print("數據更新失敗") print(e) cursor.close() db.close()
使用executemany(query, param) 批量更新
params為每條記錄的維度,可為嵌套數組和元組
注意:sql語句中需要更改的數據不管什么類型,統一使用%s作為占位符,不需要加引號
# 創建數據庫連接對象 db = pymysql.connect(host='127.0.0.1', user='root', password='pwd', database='database_name') # 創建游標對象 cursor = db.cursor() update_list = ['a', 'b'] condition_list = ['a1', 'b1'] # 條件數組和需要更新的數據數組是分開的,因為param需要以每條的維度,所以可以使用拉鏈函數合并 params = zip(update_list, condition_list) # 或 param = [['a', 'a1'], ['b', 'b1']] sql = "UPDATE map_point SET storageLocation_no = %s WHERE position_id = %s" # 注意 這里的 占位%s 都不用加引號 try: cursor.executemany(sql, params) # 執行sql語句 db.commit() # 執行事務 print("數據批量更新成功") except Exception as e: db.rollback() print("數據更新失敗") print(e) finally: cursor.close() # 關閉當前游標 db.close() # 關閉數據庫連接
讀到這里,這篇“python數據庫操作之PyMysql怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。