python中的MySQL数据库操作 连接 插入 查询 更新 操作 (2)

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxjsw.html