Python MySQLdb模块
安装
系统:Ubuntu 14.04
MySQLdb
$ pip install Mysql-python
-> 报错:EnvironmentError: mysql_config not found (安装libmysqlclient-dev)
$ apt-get install libmysqlclient-dev
$ pip install Mysql-python
如果是MAC系统,则需要先安装 mysql 服务。
使用
- 查数据示例(
fetchall()获取数据
)
import MySQLdb
# 建立连接
conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
# 设置游标
cur = conn.cursor()
# 执行SQL命令,并不会直接返回查询结果,而是返回SQL语句影响的行数
reCount = cur.execute('select * from Products;')
print reCount # 输出一个数字,是SQL影响的行数
# 使用 fetchall()方法获取数据,循环输出结果,以元祖的方式输出
for data in cur.fetchall():
print data
# 关闭连接
cur.close()
conn.close()
# 结果==》
5
('00001', 'hilife')
('00002', 'GTL')
('00003', 'GLA')
('000004', 'TYA')
('000005', 'TUH')
- 插入或者更改数据
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
cur = conn.cursor()
# 定义SQL语句
sql = 'insert into Products(prod_id, prod_name) values(%s, %s);'
# 定义数据
params = ('00002', 'GLA')
reCount = cur.execute(sql, params) #为了防止SQL注入,可以使用该方法
conn.commit() #提交
cur.close()
conn.close()
- 批量插入数据
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='sate', db='dbtest', passwd='password')
cur = conn.cursor()
# 要批量插入的数据
li = [
('000004', 'TYA'),
('000005', 'TUH')
]
sql = 'insert into Products(prod_id, prod_name) values(%s, %s);'
# 批量使用executemany
reCount = cur.executemany(sql, li) #为了防止SQL注入,可以使用该方法
conn.commit() #提交
cur.close()
conn.close()
- 之前查看数据时,返回是元祖形式,有时看起来并不明显,我们可以选择用字典的方式,将列名一起输出。
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='zheng', db='satezheng', passwd='satezheng')
# 使用字典形式返回数据
cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
# 执行命令,并不会直接打印,可以使用fetchall来读取。
reCount1 = cur.execute('select * from Products')
print reCount1 # 输出一个数字,是SQL影响的行数
for data in cur.fetchall():
print data
cur.close()
conn.close()
# 结果==》
5
{'prod_name': 'hilife', 'prod_id': '00001'}
{'prod_name': 'GLA', 'prod_id': '00002'}
{'prod_name': 'GTL', 'prod_id': '00003'}
{'prod_name': 'TYA', 'prod_id': '000004'}
{'prod_name': 'TUH', 'prod_id': '000005'}
cursor
读取执行结果的方法有:
-
fetchall()
把所有的都读出来 -
fetchmany(n)
输出指定数量n的行 -
fetchone()
只返回第一条结果 -
fetchone()
一次只返回一条结果,下次返回第二条,和文件的readlines
类似
对应的也会有指针的概念,scroll()
可以指定读取的位置
cur.scroll(0, mode='absolute') # 绝对指针, 0 就是指针的位置
cur.scroll(-1, mode='relative') # 相对指针, -1 指针位置向前移一位(指针位置-1)
import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1', user='zheng', db='satezheng', passwd='satezheng')
cur = conn.cursor()
reCount = cur.execute('select * from Products;')
# 使用 fetchone()方法获取数据
data = cur.fetchone()
print data
data = cur.fetchone()
print data
data = cur.fetchone()
print data
# 结果==》
('00001', 'hilife')
('00002', 'GTL')
('00003', 'GLA')
# 使用绝对指针时
...
data = cur.fetchone()
print data
data = cur.fetchone()
print data
cur.scroll(0, mode='absolute') # 将指针指向 0
data = cur.fetchone()
print data
# 结果==》
('00001', 'hilife')
('00002', 'GTL')
('00001', 'hilife')
# 使用相对指针
data = cur.fetchone()
print data
data = cur.fetchone()
print data
cur.scroll(-1, mode='relative') # 指针位置减1
data = cur.fetchone()
print data
# 结果==》
('00001', 'hilife')
('00002', 'GTL')
('00002', 'GTL')
-
cur.lastrawid()
获取自增id