Python和数据之间的连接建立起来之后,要操作数据库,就需要让python对数据库执行SQL语句。Python是通过游标执行SQL语句的。所以,连接建立之后,就要利用连接对象得到游标对象,方法如下:
>>> cur = conn.cursor()此后,就可以利用游标对象的方法对数据库进行操作。那么还得了解游标对象的常用方法:
名称描述close() 关闭游标。之后游标不可用
execute(query[,args]) 执行一条SQL语句,可以带参数
executemany(query, pseq) 对序列pseq中的每个参数执行sql语句
fetchone() 返回一条查询结果
fetchall() 返回所有查询结果
fetchmany([size]) 返回size条结果
nextset() 移动到下一个结果
scroll(value,mode=\'relative\') 移动游标到指定行,如果mode=\'relative\',则表示从当前所在行移动value条,如果mode=\'absolute\',则表示从结果集的第一行移动value条.
插入
例如,要在数据表users中插入一条记录,使得:username="python",password="123456",email="python@gmail.com",这样做:
>>> cur.execute("insert into users (username,password,email) values (%s,%s,%s)",("python","123456","python@gmail.com")) 1L没有报错,并且返回一个"1L"结果,说明有一行记录操作成功。不妨用"mysql>"交互方式查看一下:
mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | qiwsir@gmail.com | +----+----------+----------+------------------+ 1 row in set (0.00 sec)咦,奇怪呀。怎么没有看到增加的那一条呢?哪里错了?可是上面也没有报错呀。
特别注意,通过"cur.execute()"对数据库进行操作之后,没有报错,完全正确,但是不等于数据就已经提交到数据库中了,还必须要用到"MySQLdb.connect"的一个属性:commit(),将数据提交上去,也就是进行了"cur.execute()"操作,要将数据提交,必须执行:
>>> conn.commit()再到"mysql>"中运行"select * from users"试一试:
mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | qiwsir@gmail.com | | 2 | python | 123456 | python@gmail.com | +----+----------+----------+------------------+ 2 rows in set (0.00 sec)果然如此。这就如同编写一个文本一样,将文字写到文本上,并不等于文字已经保留在文本文件中了,必须执行"CTRL-S"才能保存。也就是在通过python操作数据库的时候,以"execute()"执行各种sql语句之后,要让已经执行的效果保存,必须运行连接对象的"commit()"方法。
再尝试一下插入多条的那个命令"executemany(query,args)".
>>> cur.executemany("insert into users (username,password,email) values (%s,%s,%s)",(("google","111222","g@gmail.com"),("facebook","222333","f@face.book"),("github","333444","git@hub.com"),("docker","444555","doc@ker.com"))) 4L >>> conn.commit()到"mysql>"里面看结果:
mysql> select * from users; +----+----------+----------+------------------+ | id | username | password | email | +----+----------+----------+------------------+ | 1 | qiwsir | 123123 | qiwsir@gmail.com | | 2 | python | 123456 | python@gmail.com | | 3 | google | 111222 | g@gmail.com | | 4 | facebook | 222333 | f@face.book | | 5 | github | 333444 | git@hub.com | | 6 | docker | 444555 | doc@ker.com | +----+----------+----------+------------------+ 6 rows in set (0.00 sec)成功插入了多条记录。在"executemany(query, pseq)"中,query还是一条sql语句,但是pseq这时候是一个tuple,这个tuple里面的元素也是tuple,每个tuple分别对应sql语句中的字段列表。这句话其实被执行多次。只不过执行过程不显示给我们看罢了。
除了插入命令,其它对数据操作的命了都可用类似上面的方式,比如删除、修改等。
查询如果要从数据库中查询数据,也用游标方法来操作了。
>>> cur.execute("select * from users") 7L