當前位置:
首頁 > 知識 > Python 操作 MySQL 的正確姿勢

Python 操作 MySQL 的正確姿勢

使用Python進行MySQL的庫主要有三個,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。


Python-MySQL資格最老,核心由C語言打造,介面精鍊,性能最棒,缺點是環境依賴較多,安裝複雜,近兩年已停止更新,只支持Python2,不支持Python3。


PyMySQL為替代Python-MySQL而生,純python打造,介面與Python-MySQL兼容,安裝方便,支持Python3。

SQLAlchemy是一個ORM框架,它並不提供底層的資料庫操作,而是要藉助於MySQLdb、PyMySQL等第三方庫來完成,目前SQLAlchemy在Web編程領域應用廣泛。


本文主要介紹PyMySQL的正確使用方法,示例代碼都是選自實戰項目。

Python 操作 MySQL 的正確姿勢


安裝


簡單的方式:


pip install pymysql


如果無法聯網,需要進行離線安裝,例如:


導入

import pymysql


連接


def connect_wxremit_db(): return pymysql.connect(host= 10.123.5.28 , port=3306, user= root , password= root1234 , database= db_name , charset= latin1 )


查詢


def query_country_name(cc2): sql_str = ("SELECT Fcountry_name_zh" + " FROM t_country_code" + " WHERE Fcountry_2code= %s " % (cc2)) logging.info(sql_str) con = mysql_api.connect_wxremit_db() cur = con.cursor() cur.execute(sql_str) rows = cur.fetchall() cur.close() con.close() assert len(rows) == 1, Fatal error: country_code does not exists! return rows[0][0]

簡單插入


def insert_file_rec(self, file_name, file_md5): con = mysql_api.connect_wxremit_db() cur = con.cursor() try: sql_str = ("INSERT INTO t_forward_file (Ffile_name, Ffile_md5)", + " VALUES ( %s , %s )" % (file_name, file_md5)) cur.execute(sql_str) con.commit() except: con.rollback() logging.exception( Insert operation error ) raise finally: cur.close() con.close()


批量插入


remit_ids = [( 1234 , CAD ), ( 5678 , HKD )]con = mysql_api.connect_wxremit_db() cur = con.cursor() try: cur.executemany("INSERT INTO t_order (Fremit_id, Fcur_type, Fcreate_time" + " VALUES (%s, %s, now())", new_items) assert cur.rowcount == len(remit_ids), my error message con.commit() except Exception as e: con.rollback() logging.exception( Insert operation error ) finally: cur.close() con.close()

更新


def update_refund_trans(self, remit_id): con = mysql_api.connect_wxremit_db() cur = con.cursor() try: sql_str = ("SELECT Fremit_id" + " FROM t_wxrefund_trans" + " WHERE Fremit_id= %s " % remit_id + " FOR UPDATE") logging.info(sql_str) cur.execute(sql_str) assert cur.rowcount == 1, Fatal error: The wx-refund record be deleted! sql_str = ("UPDATE t_wxrefund_trans" + " SET Fcheck_amount_flag=1" + ", Fmodify_time=now()" + " WHERE Fremit_id= %s " % remit_id logging.info(sql_str) cur.execute(sql_str) assert cur.rowcount == 1, The number of affected rows not equal to 1 con.commit() except: con.rollback() logging.exception( Update operation error ) raise finally: cur.close() con.close()


PyMySQL已經相當成熟,和Python-MySQL一樣,它在很多Linux發行版本中都是可選的安裝組件。


作者:邵建永


via:https://www.qcloud.com/community/article/687813


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

如何用 100行Python 代碼做出魔性聲控遊戲「八分音符醬」
pygit:500行Python代碼實現的Git客戶端
Python中NaN和None 的詳細比較
手把手教你如何用 OpenCV+Python 實現人臉識別

TAG:Python |

您可能感興趣

一起來學習MySQL和Python
Python鏈式操作:PyFunctional
Python小技巧:QPython,一個在手機上運行Python的神器
PPython:PHP 擁抱 Python 的利器
PyTorch深度概率推斷工具Brancher,掌握ML和Python基礎即可上手
GoPro Python API
PowerShell-RAT:一款基於Python的後門程序
Python寫入數據到MySQL
我是如何在 Python 內使用深度學習實現 iPhone X的FaceID 的
使用 VS Code 進行 Python 編程
Python之父考慮使用 PEG Parser 重構Python解釋器
MongoDB Python官方驅動 PyMongo 的簡單封裝
Python yield與實現
在Win上做Python開發?當然是用官方的MS Terminal和VS Code了
對新手友好的PyTorch深度概率推斷工具Brancher,掌握ML和Python基礎即可上手
轉行怎麼學Python?Python的前景與優劣勢
Python大神利用PyQt
Python 作用域和 LEGB
使用PrettyPrinter讓Python輸出更漂亮
把Python當作Shell使用:Xonsh