There are three main libraries for using Python for MySQL, Python-MySQL (the more familiar name may be MySQLdb), PyMySQL and SQLAlchemy.
Python-MySQL has the oldest qualifications. The core is built in C language, the interface is refined, and the performance is the best. The disadvantage is that it has many environmental dependencies and complicated installation. It has stopped updating in the past two years. It only supports Python2 and does not support Python3.
PyMySQL was born to replace Python-MySQL. It is built purely in Python. The interface is compatible with Python-MySQL, easy to install, and supports Python3.
SQLAlchemy is an ORM framework. It does not provide underlying database operations, but relies on third-party libraries such as MySQLdb and PyMySQL. Currently, SQLAlchemy is widely used in the field of Web programming.
This article mainly introduces the correct use of PyMySQL. The sample codes are all selected from actual projects.
The simple way:
pip install pymysql
If you cannot connect to the Internet, you need to install it offline, for example:
pip install pymysql-x.x.x.tar.gz
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 is quite mature, and like Python-MySQL, it is an optional installation component in many Linux distributions.
The above is the detailed content of The correct posture for operating MySQL in Python. For more information, please follow other related articles on the PHP Chinese website!