1、MySQL-python (MySQLdb)
MySQL-python 又叫 MySQLdb,是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在 Windows 平台安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代的是它的衍生版本。
2、PyMySQL
PyMySQL 是纯 Python 实现的驱动,效率上比不上 MySQLdb,最大的特点可能就是它的安装方式没那么繁琐,同时也兼容 MySQL-python
3、mysqlclient
由于 MySQL-python 年久失修,后来出现了它的 Fork 版本 mysqlclient,完全兼容 MySQLdb,同时支持 Python3.x,是 Django ORM的依赖工具,如果你想使用原生 SQL 来操作数据库,那么推荐此驱动。
综上,选择 mysqlclient
来连接
在win7-64bit的环境下会有错误:unable to find vcvarsall.bat
直接使用pip install 安装失败
1、需要先下载wheel安装包 地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 根据对应的python版本下载安装包
在whl文件目录下安装wheel包
#cmd
Pip instal xxxxxxx.whl
2、安装mysqlclient
#cmd
pip install mysqlclient
1、在CentOS系统下使用pip安装mysqlclient库:
# Python 3
pip3 install mysqlclient
2、如果有报错就需要安装依赖:
yum install python-devel mysql-devel
1、连接数据库
db = MySQLdb.connect('127.0.0.1','root','root','database')
#或者
db = MySQLdb.connect(host='127.0.0.1',port='3307',user='root',passwd='root',db='database')
#一般来说,在代码中放置密码并不是一个好主意。可以从 ~/.my.cnf (UNIX-like systems) 获取用户名和密码以及其他参数
db = MySQLdb.connect(host='127.0.0.1',db = 'database', read_default_file='~/.my.cnf')
2、要执行查询,首先需要一个游标,然后您可以对其执行查询
# 使用cursor()方法获取操作游标
cursor = db.cursor()
3、查询
# SQL语句
cid = 1000
sql_sel = 'select * from test_table WHERE id = %s'
# 执行sql语句 .execute()
cursor.execute(sql_sel,(cid,))
# 返回值 .fetchone() 返回单元组类型
cursor.fetchone()
(值1, 值2, 值3...)
4、如果您想要更多行,可以使用 .fetchmany(n)
或 .fetchall()
。
.fetchmany(n)
,n
是可选的,默认为 c.arraysize
,通常为1.
这两个方法都返回一系列行,如果没有更多行,则返回一个空序列。
如果使用奇怪的游标类,则行本身可能不是元组。
请注意,与上面相反, 当没有更多行要提取时 c.fetchone()
返回 None
。
5、很可能使用的唯一其他方法是必须执行多行插入时
c.executemany(
'''INSERT INTO breakfast (name, spam, eggs, sausage, price)
VALUES (%s, %s, %s, %s, %s)''',
[
("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ),
("Not So Much Spam Plate", 3, 2, 0, 3.95 ),
("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )
] )
# coding=utf-8
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect(host='127.0.0.1',user='root',passwd='root',db='test_db')
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")
# SQL语句
cid = '1000'
sql_ins = 'INSERT INTO test_table VALUES (%s,%s)'
sql_del = 'DELETE FROM test_table WHERE id = %s '
sql_upd = 'UPDATE test_table SET dd = %s WHERE dd > %s'
sql_sel = 'select * from test_table WHERE id = %s'
try:
# 执行sql语句,增
cursor.execute(sql_ins,(cid,cid))
# 执行sql语句,删
cursor.execute(sql_del,(cid,))
# 执行sql语句,改
cursor.execute(sql_upd,(cid,cid))
# 执行sql语句,查
cursor.execute(sql_sel,(cid,))
data = cursor.fetchall()
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()
# 关闭数据库连接
db.close()