Python pymysql 模块

pymysql 是 Python3 连接 MySQL 的一个模块,常见用法如下:

[root@localhost ~]$ pip3 install pymysql    # 安装 pymysql 模块
In [1]: import pymysql

In [2]: conn = pymysql.connect(host='127.0.0.1', user='root', passwd='123456')    # connect()用于连接MySQL数据库,结果返回一个连接对象
                                                                                  # 常用的连接参数有:host 、user 、passwd 、db 、port
In [3]: cur = conn.cursor()               # 创建游标,用来存放执行SQL语句所检索出来的结果集

In [4]: cur.execute('show databases')     # 使用游标来执行SQL语句,8L表示结果有8行,结果会存存储在游标中
Out[4]: 8L

In [5]: cur.fetchone()
Out[5]: ('information_schema',)           # fetchone()用于查看一条结果

In [6]: cur.fetchmany(3)
Out[6]: (('mysql',), ('performance_schema',), ('test',))    # fetchmany()用于查看多条结果

In [7]: cur.fetchall()
Out[7]: (('test1',), ('test2',), ('test3',), ('wordpress',))    # fetchall()用于查看所有结果

In [8]: cur.close() # 关闭游标
In [9]: conn.close() # 关闭数据库连接

在 Python 中的写法:

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import pymysql

def connectMySQL():
    db_config = {
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'root',
        'passwd': '123456',
        'db': 'mysql',
        'charset': 'utf8',
    }

    conn = pymysql.connect(**db_config)
    return conn

if __name__ == '__main__':
     conn = connectMySQL()
     cur = conn.cursor()
     try:
         cur.execute('show tables;')
         result = cur.fetchall()
         print(result)
         cur.close()
         conn.commit()             <--- 这里使用MySQL事务,如果执行SQL语句成功则提交,如果执行失败则回滚
     except:
         conn.rollback()
         print("执行SQL语句失败!")
     finally:
         conn.close()

使用 MySQL 连接池:

我们对数据库进行查询/插入/更新等操作,需要先连接数据库,创建数据库连接是一个很耗时的操作,为了避免多次连接 MySQL 数据库,我们可以使用 MySQL 连接池;
MySQL 连接池(Connection Pooling)是 MySQL 程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由 MySQL 程序动态地对池中的连接进行申请,使用,释放。

[root@localhost ~]$ pip3 install DBUtils    # 安装DBUtils
#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import pymysql
from DBUtils.PooledDB import PooledDB

def connectMySQL():
    db_config = {
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'game',
        'passwd': 'cqbygame',
        'db': 'mysql',
        'charset': 'utf8',
    }

    pool = PooledDB(pymysql, 5, **db_config)    # 创建连接池,指定创建5个数据库连接
    conn = pool.connection()                    # 以后每次需要连接数据库就用connect()函数获取连接
    return conn

if __name__ == '__main__':
     conn = connectMySQL()
     cur = conn.cursor()
     try:
         cur.execute('show tables;')
         result = cur.fetchall()
         print(result)
         cur.close()
         conn.commit()
     except:
         conn.rollback()
         print("执行SQL语句失败!")
     finally:
         conn.close()

 

 

 

 

 

 

 

    

    

posted @ 2019-02-27 22:54  孔雀东南飞  阅读(292)  评论(0编辑  收藏  举报