讲解python操作数据库,完成简单的增删改查工作,以mysql数据库为例。
python的mysql数据库操作模块叫mysqldb,需要额外的安装下。
通过pip工具安装:pip install mysqldb
mysqldb模块,我们主要就用到连接数据库的方法mysqldb.connect(),连接上数据库后,再使用一些方法做相应的操作。
mysqldb.connect(parameters…)方法提供了以下一些常用的参数:
13.1 数据库增删改查
13.1.1 在test库创建一张user表,并添加一条记录
>>> conn = mysqldb.connect(host=’192.168.1.244′,user=’root’,passwd=’qhyctaji’,db=’test’,charset=’utf8′)
>>> cursor = conn.cursor()
>>> sql = “create table user(id int,name varchar(30),password varchar(30))”
>>> cursor.execute(sql) # 返回的数字是影响的行数
0l
>>> sql = “insert into user(id,name,password) values(‘1′,’xiaoming’,’123456′)”
>>> cursor.execute(sql)
1l
>>> conn.commit() # 提交事务,写入到数据库
>>> cursor.execute(‘show tables’) # 查看创建的表
1l
>>> cursor.fetchall() # 返回上一个游标执行的所有结果,默认是以元组形式返回
((u’user’,),)
>>> cursor.execute(‘select * from user’)
1l
>>> cursor.fetchall()
((1l, u’xiaoming’, u’123456′),)
13.1.2 插入多条数据
>>> sql = ‘insert into user(id,name,password) values(%s,%s,%s)’
>>> args = [(‘2′,’zhangsan’,’123456′), (‘3′,’lisi’,’123456′),(‘4′,’wangwu’,’123456′)]
>>> cursor.executemany(sql, args)
3l
>>> conn.commit()
>>> sql = ‘select * from user’
>>> cursor.execute(sql)
4l
>>> cursor.fetchall()
((1l, u’xiaoming’, u’123456′), (2l, u’zhangsan’, u’123456′), (3l, u’lisi’, u’123456′), (4l, u’wangwu’, u’123456′))
args变量是一个包含多元组的列表,每个元组对应着每条记录。当查询多条记录时,使用此方法,可有效提高插入效率。
13.1.3 删除用户名xiaoming的记录
>>> sql = ‘delete from user where name=”xiaoming”‘
>>> cursor.execute(sql)
1l
>>> conn.commit()
>>> sql = ‘select * from user’
>>> cursor.execute(sql)
3l
>>> cursor.fetchall()
((2l, u’zhangsan’, u’123456′), (3l, u’lisi’, u’123456′), (4l, u’wangwu’, u’123456′))
13.1.4 查询记录
>>> sql = ‘select * from user’
>>> cursor.execute(sql)
3l
>>> cursor.fetchone() # 获取第一条记录
(2l, u’zhangsan’, u’123456′)
>>> sql = ‘select * from user’
>>> cursor.execute(sql)
3l
>>> cursor.fetchmany(2) # 获取两条记录
((2l, u’zhangsan’, u’123456′), (3l, u’lisi’, u’123456′))
13.1.4 以字典形式返回结果
默认显示是元组形式,要想返回字典形式,使得更易处理,就用到cursor([cursorclass])中的cusorclass参数。
传入mysqldb.cursors.dictcursor类:
>>> cursor = conn.cursor(mysqldb.cursors.dictcursor)
>>> sql = ‘select * from user’
>>> cursor.execute(sql)
3l
>>> cursor.fetchall()
({‘password’: u’123456′, ‘id’: 2l, ‘name’: u’zhangsan’}, {‘password’: u’123456′, ‘id’: 3l, ‘name’: u’lisi’}, {‘password’: u’123456′, ‘id’: 4l, ‘name’: u’wangwu’})
13.2 遍历查询结果
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import mysqldb
try:
conn = mysqldb.connect(host=’127.0.0.1′, port=3306, user=’root’, passwd=’123456′, connect_timeout=3, charset=’utf8′)
cursor = conn.cursor()
sql = “select * from user”
cursor.execute(sql)
for i in cursor.fetchall():
print i
except exception, e:
print (“connection error: ” + str(e))
finally:
conn.close()
# python test.py
(2l, u’zhangsan’, u’123456′)
(3l, u’lisi’, u’123456′)
(4l, u’wangwu’, u’123456′)
使用for循环遍历查询结果,并增加了异常处理。