Maison  >  Article  >  développement back-end  >  La bonne posture pour faire fonctionner MySQL en Python

La bonne posture pour faire fonctionner MySQL en Python

巴扎黑
巴扎黑original
2017-04-29 15:51:431449parcourir

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.

Installer

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

Importer

import pymysql

Connectez-vous

def connect_wxremit_db():
    return pymysql.connect(host='10.123.5.28',
                           port=3306,
                           user='root',
                           password='root1234',
                           database='db_name',
                           charset='latin1')

Requête

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]

Insérez simplement

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()

Insertion par lots

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()

Mise à jour

    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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn