Home >Backend Development >Python Tutorial >The correct posture for operating MySQL in Python

The correct posture for operating MySQL in Python

巴扎黑
巴扎黑Original
2017-04-29 15:51:431488browse

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.

Install

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

import pymysql

Connection

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

Query

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]

Simply insert

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

Batch insert

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

Update

    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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn