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的正確使用方法,示例代碼都是選自實戰項目。
安裝
簡單的方式:
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
※如何用 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