【www.bbyears.com--python】
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编程领域应用广泛。
word-wrap: break-word; margin: 5px 0px; color: rgb(0, 0, 0); font-family: " sans="" font-size:="" font-style:="" font-variant-ligatures:="" font-variant-caps:="" font-weight:="" letter-spacing:="" orphans:="" text-align:="" text-indent:="" text-transform:="" white-space:="" widows:="" word-spacing:="" -webkit-text-stroke-width:="">本文主要介绍PyMySQL的正确使用方法,示例代码都是选自实战项目。
安装
简单的方式:
代码如下 pip install pymysql如果无法联网,需要进行离线安装,例如:
代码如下 pip install pymysql-x.x.x.tar.gz导入
代码如下 importpymysql连接
代码如下
defconnect_wxremit_db():
returnpymysql.connect(host=ཆ.123.5.28',
port=3306,
user='root',
password='root1234',
database='db_name',
charset='latin1')
查询
代码如下
defquery_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()
assertlen(rows)==1,'Fatal error: country_code does not exists!'
returnrows[0][0]
简单插入
代码如下
definsert_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=[(','CAD'), (','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)
assertcur.rowcount==len(remit_ids),'my error message'
con.commit()
exceptException as e:
con.rollback()
logging.exception('Insert operation error')
finally:
cur.close()
con.close()
更新
代码如下
defupdate_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)
assertcur.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)
assertcur.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发行版本中都是可选的安装组件。