最近在寻找一个支持python访问mysql数据库的包,并希望能够支持连接池功能,首先想到的是mysql-python加DButils来实现。但是安装过程中发现mysql-python依赖了libmysqlclient-dev的包,由于开发使用virtualenv虚拟环境,而直接使用pip安装却找不到libclientmysql-dev的包,又不想将它安装在实际环境中,于是转而找到了mysql-connector-python来使用。
mysql-connector-python有以下几个优点:1,它由mysql官方提供,且不依赖任何其它包安装之后就可以直接使用,符合virtualenv环境下使用;2,它支持连接池功能,使用方法简单。
安装
下载 Connector/Python
2.1.3 ,选择:Platform
Independent
tar -zxvf
mysql-connector-python-2.1.3.tar.gz
cd
mysql-connector-python-2.1.3/
python
setup.py install
使用
使用过程也非常简单:
1,建立连接
import mysql.connector
conn=mysql.connector.connect(host=”127.0.0.1″,user=”test”,password=”1234″)
该命令会返回一个mysql连接,如果要使用连接池功能可以多指定一个参数:pool_size或者pool_name
conn=mysql.connector.connect(host=”127.0.0.1″,user=”test”,password=”1234″,pool_size=10)
该命令会从连接池中分配一个连接使用。
2,执行
cur=conn.cursor()
cur.execute(“show databases”)
cur.fetchall()
3,关闭连接
conn.close()
如果conn是直接新建的连接则它会被关闭,如果是从线程池中分配一个连接则会被归还给连接池
4,关于游标
mysql-python支持两种类型的游标:1.cursor,2,sscursor。根据文档介绍sscursor是server-side游标,但实际不是的,mysql本身是不支持server-side游标。sscursor实际是一个non_buffered
cursor。而cursor是一个buffered cursor
mysql-connector-python正好相反,它默认使用的是non_buffered cursor,创建buffered
cursor时需要显示指定参数。
创建non_buffered cursor:
cur=conn.cursor()
创建buffered cursor
cur=conn.cursor(buffered=True)
buffrered cursor与non_buffered cursor的区别见[2]
mysql-connector-python正在模拟实现server-side
cursor[1],实现办法是将查询结果集存放在server端的一个临时表中,客户端调用 fetch方法时从临时表中返回结果。
相关阅读:
[1]
http://geert.vanderkelen.org/simulating-server-side-cursors-with-mysql-connectorpython/
[2]
http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorbuffered.html