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的正确使用方法,示例代码都是选自实战项目。
安装
简单的方式:
pipinstallpymysql
如果无法联网,需要进行离线安装,例如:
pipinstallpymysql-x.x.x.tar.gz
导入
importpymysql
连接
defconnect_wxremit_db(): returnpymysql.connect(host='10.123.5.28', port=3306, user='root', password='root1234', database='db_name', charset='latin1')
查询
defquery_country_name(cc2): sql_str=("SELECTFcountry_name_zh" +"FROMt_country_code" +"WHEREFcountry_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() assertlen(rows)==1,'Fatalerror:country_codedoesnotexists!' returnrows[0][0]
简单插入
definsert_file_rec(self,file_name,file_md5): con=mysql_api.connect_wxremit_db() cur=con.cursor() try: sql_str=("INSERTINTOt_forward_file(Ffile_name,Ffile_md5)", +"VALUES('%s','%s')"%(file_name,file_md5)) cur.execute(sql_str) con.commit() except: con.rollback() logging.exception('Insertoperationerror') raise finally: cur.close() con.close()
批量插入
remit_ids=[('1234','CAD'),('5678','HKD')] con=mysql_api.connect_wxremit_db() cur=con.cursor() try: cur.executemany("INSERTINTOt_order(Fremit_id,Fcur_type,Fcreate_time" +"VALUES(%s,%s,now())",new_items) assertcur.rowcount==len(remit_ids),'myerrormessage' con.commit() exceptExceptionase: con.rollback() logging.exception('Insertoperationerror') finally: cur.close() con.close()
更新
defupdate_refund_trans(self,remit_id): con=mysql_api.connect_wxremit_db() cur=con.cursor() try: sql_str=("SELECTFremit_id" +"FROMt_wxrefund_trans" +"WHEREFremit_id='%s'"%remit_id +"FORUPDATE") logging.info(sql_str) cur.execute(sql_str) assertcur.rowcount==1,'Fatalerror:Thewx-refundrecordbedeleted!' sql_str=("UPDATEt_wxrefund_trans" +"SETFcheck_amount_flag=1" +",Fmodify_time=now()" +"WHEREFremit_id='%s'"%remit_id logging.info(sql_str) cur.execute(sql_str) assertcur.rowcount==1,'Thenumberofaffectedrowsnotequalto1' con.commit() except: con.rollback() logging.exception('Updateoperationerror') raise finally: cur.close() con.close()
PyMySQL已经相当成熟,和Python-MySQL一样,它在很多Linux发行版本中都是可选的安装组件。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!