Python中使用Mysql(编码实践)

来源:互联网 发布:淘宝网衣架 编辑:程序博客网 时间:2024/05/20 20:22

文档 或者看源码

http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html


开篇

在上一篇Python中使用Mysql(安装篇)中,我们为Python安装了支持MySQL数据库的MySQLdb包,这篇中写的是我工作中最常用到的几种情形。

虽然也支持在Python中创建表,之类的操作。但在实际中很少是通过程序去创建一个数据库或一张表的。 这些工作一般都是由公司的DBA来完成。所以对于研发来说, 对数据库最常做的事情包括查询,插入行,和更新行。在实际工作中,删除一些行的行为也是不常用的,因为删除了就不容易回来,当不需要一些数据时,通常有一个代表 可用和不可用的字段,比如叫 enable。 当想删除一行时候,把这一行的enable置成0 来代替删除的动作。


情形一,查询一行

下面是一段查询代码小例子:

#!/usr/local/bin/python#  coding:utf-8 import MySQLdbdb_handle = MySQLdb.connect(host = '10.10.10.10', user = 'root', passwd = '123456',  db = 'test',port = 3306, charset = 'utf8') sql = "select * from test.user_info limit 1"cur = db_handle.cursor( MySQLdb.cursors.DictCursor )cur.execute( sql )result = cur.fetchone()cur.close()db_handle.close()print result['id']

连接数据库,查询一行,我用了fetchone()这个方法。 最后把结果打印了出来。非常简单。
请看这一句
cur = db_handle.cursor( MySQLdb.cursors.DictCursor )
它使得上面的result是一个字典的对象,可以直接用索引来访问对应的字段。

情形二,查询多行

查询多行和查询一行基本一样,就是 用的是 fetchall() 代替 fetchone()

#!/usr/local/bin/python#  coding:utf-8 import MySQLdbdb_handle = MySQLdb.connect(host = '10.10.0.10', user = 'root', passwd = '123456',  db = 'test',port = 3306, charset = 'utf8')sql = "select * from user_info limit 3"cur = db_handle.cursor( MySQLdb.cursors.DictCursor )cur.execute( sql )result = cur.fetchall()cur.close()db_handle.close()if not result :    for row in result:        print row['id']

查询时候,总有可能是查不到的,这时fetchone的返回值是 None, 但fetchall() 的返回值 是 () 空的元组,而不是None。 所以可以通过 下面这句判断是不足的。
<pre name="code" class="python"><strong>if result == None :</strong>
这句对 fetchone()是有效的,但是对于 fetchall()是无效的,
推荐使用
<strong>if not result :</strong>
这样对于 None 或者 空的元组() 都是有效的。
 

fetchall()的返回是一个元组,所以不能直接取对应字段,通常我是用一个循环,来处理每一行的数据。


情形三,插入或者更新一行

插入和更新与 查询有不同之处在于 这个动作修改了数据库中的内容。 所以少了查询后fetch结果的动作,而换成了commit 提交的动作。 示例代码:

#!/usr/local/bin/python#  coding:utf-8 import MySQLdbdb_handle = MySQLdb.connect(host = '10.10.10.10', user = 'root', passwd = '123456',  db = 'test',port = 3306, charset = 'utf8')sql = "insert into fruit values ('','apple','fruit','red')"cur = db_handle.cursor( MySQLdb.cursors.DictCursor )cur.execute( sql )db_handle.commit()cur.close()db_handle.close()

更新也是差不多的句式,只是SQL语句从insert 换成了 update了 ,最后不要忘记了 commit()。



0 0
原创粉丝点击