#!/usr/bin/env python
#coding:utf-8
import MySQLdb
conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='123')
conn.select_db('08day5')#选择数据库
cur=conn.cursor()#以元组的形式展示
#cur=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)#以字典的形式展示
cur.execute('DROP TABLE IF EXISTS admin')#如果数据表已经存在,则使用execute()方法删除
#创建数据表
sql='''CREATE TABLE admin(
id INT PRIMARY KEY AUTO_INCREMENT,
user VARCHAR(20) NOT NULL,
passwd VARCHAR(20) NOT NULL
)'''
cur.execute(sql)
#插入单条记录
sql='insert into admin(user,passwd) values(%s,%s)'#使用sql语句,无论我们要插入的数据是什么类型,占位符都可以用%s
params=('alex','usa')
cur.execute(sql,params)
conn.commit()#请注意:用commit()提交事务之后,才能真正的插入数据。
#插入多条记录(批量插入)
sql='insert into admin(user,passwd) values(%s,%s)'
l=[('song','222aaa'),('shi','333bbb'),('yuan','444ccc'),('xing','abcddd'),('cheng','kkjjhh')]
cur.executemany(sql,l)#使用executemany()实现批量插入!
conn.commit()
#删除记录
sql='delete from admin where id=%s'
params=(3,)
cur.execute(sql,params)
conn.commit()
#查询记录
reCount=cur.execute('select * from admin')#返回本次操作影响的记录数
print reCount
data=cur.fetchall()#获得 'select * from admin'语句 返回的结果集
print data
cur.scroll(0,mode='absolute')#光标回到初始位置0处(绝对定位)
print cur.fetchone()#此时,光标位置为0;返回位置为0的记录
print cur.fetchone()#返回位置为1的记录
cur.scroll(1,mode='absolute')#光标回到1处(绝对定位)
print cur.fetchone()#返回位置为1的记录
cur.scroll(-2,mode='relative')#光标回退2步(相对定位)
print cur.fetchmany(3)#从光标所在的位置(此时,光标位于0处),连续读取3条记录
cur.scroll(1,mode='relative')#光标前进1步(相对定位)
print cur.fetchone()#返回光标(位于4处)指向的那一条记录
#修改
sql='update admin set passwd=%s where user=%s'
params=('123123','song')
cur.execute(sql,params)
conn.commit()
cur.close()
conn.close()
运行结果:
5
((1L, 'alex', 'usa'), (2L, 'song', '222aaa'), (4L, 'yuan', '444ccc'), (5L, 'xing', 'abcddd'), (6L, 'cheng', 'kkjjhh'))
(1L, 'alex', 'usa')
(2L, 'song', '222aaa')
(2L, 'song', '222aaa')
((1L, 'alex', 'usa'), (2L, 'song', '222aaa'), (4L, 'yuan', '444ccc'))
(6L, 'cheng', 'kkjjhh')
查询后中文会正确显示,但在数据库中却是乱码的。使用一个属性有可搞定:
将Python代码
conn = MySQLdb.connect(host='localhost', user='root', passwd='root', db='python') 中增加一个参数:
改为:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='root', db='python',charset='utf8')
charset应该和我们数据库的编码一样,如果数据库是utf8 ,则上述语句中也应该写charset='utf8'。
下面贴一下常用的函数:
连接对象提供了对事务操作的支持;标准的方法有:
commit() 提交
rollback() 回滚
cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数。
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数。
executemany(self, query, args):执行单条sql语句,但是会依次使用参数列表里的参数,返回值为受影响的行数。
nextset(self):移动到下一个结果集
cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行。
fetchmany(self, size=None):接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据。
fetchone(self):返回一条结果行。
scroll(self, value, mode='relative'):移动指针到某一行。
如果mode='relative',且value>0,则表示从当前所在行前进value行;
如果mode='relative',且value<0,则表示从当前所在行回退value行;
如果mode='absolute',则必须满足value>=0(此时的value可以视为结果集的索引,从0开始计数),表示将光标移动到value处。
(完)