Maison > Article > développement back-end > La bonne posture pour faire fonctionner MySQL en Python
Il existe trois bibliothèques principales pour utiliser Python pour MySQL, Python-MySQL (le nom le plus familier peut être MySQLdb), PyMySQL et SQLAlchemy.
Python-MySQL possède les qualifications les plus anciennes. Le noyau est construit en langage C, l'interface est raffinée et les performances sont les meilleures. L'inconvénient est qu'il présente de nombreuses dépendances environnementales et une installation compliquée. Il a cessé de se mettre à jour au cours des deux dernières années. . Il prend uniquement en charge Python2 et ne prend pas en charge Python3.
PyMySQL est né pour remplacer Python-MySQL. Il est construit uniquement en Python. L'interface est compatible avec Python-MySQL, facile à installer et prend en charge Python3.
SQLAlchemy est un framework ORM. Il ne fournit pas d'opérations de base de données sous-jacentes, mais s'appuie sur des bibliothèques tierces telles que MySQLdb et PyMySQL. Actuellement, SQLAlchemy est largement utilisé dans le domaine de la programmation Web.
Cet article présente principalement l'utilisation correcte de PyMySQL. Les exemples de codes sont tous sélectionnés à partir de projets réels.
De manière simple :
pip install pymysql
Si vous ne parvenez pas à vous connecter à Internet, vous devez l'installer hors ligne, par exemple :
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 est assez mature et, comme Python-MySQL, il s'agit d'un composant d'installation facultatif dans de nombreuses distributions Linux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!