Python 数据库开发 - 天生我材必有用,千金散尽还复来 - JavaEye技术网站

来源:百度文库 编辑:神马文学网 时间:2024/04/28 01:18:50
二、MySQLdb的使用。

引入我们需要的包
import MySQLdb

1.和数据库建立连接
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable")
提供的connect方法用来和数据库建立连接,接收数个参数,返回连接对象.

比较常用的参数包括
host:数据库主机名.默认是用本地主机.
user:数据库登陆名.默认是当前用户.
passwd:数据库登陆的秘密.默认为空.
db:要使用的数据库名.没有默认值.
port:MySQL服务使用的TCP端口.默认是3306.
conn连接有两个重要的方法commit【提交新增和修改】,rollback【撤销新增或修改】

2.执行SQL语句获取返回值
//获取连接的游标
cursor=conn.cursor()
//查询
sql = "select * from 【table】"
//新增
sql = "insert into 【table】(字段,字段) values(值,值)"
//修改
sql = "update 【table】 set 字段 =‘值’where 条件 "
//删除
sql = "delete from 【table】 where 条件"
cursor.execute(sql)

返回值
cur.execute('select * from tables')
其返回值为SQL语句得到的行数,如:2L,表示2行。
然后,可以从该对象的fetchone或fetchall方法得到行信息。

获取行信息
指针对象的fetchone()方法,是每次得到一行的tuple返回值:
引用
>>> row=cur.fetchone()
>>> print row
('user1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L, '/home/FTP/user1', '')

指针对象的fetchall()方法,是得到一组tuple,其内容为由行信息组成的tuple值:
引用
>>> cur.scroll(0,'absolute')
>>> row=cur.fetchall()
>>> print row
(('user1', '52c69e3a57331081823331c4e69d3f2e', 1000L, 1000L, '/home/FTP/user1', ''), ('user2', '7e58d63b60197ceb55a1c487989a3720', 1000L, 1000L, '/home/FTP/user2', None))

移动指针
当使用fetchone()方法是,指针是会发生移动的。所以,若不重置指针,那么使用fetchall的信息将只会包含指针后面的行内容。
手动移动指针使用:
cur.scroll(int,parm)

含义为:
引用
int:移动的行数,整数;在相对模式下,正数向下移动,负值表示向上移动。
parm:移动的模式,默认是relative,相对模式;可接受absoulte,绝对模式。

修改数据
修改数据,包括插入、更新、删除。它们都是使用指针对象的execute()方法执行:
cur.execute("insert  into table (row1, row2) values ('111', '222')")
cur.execute("update  table set   row1 = 'test'  where  row2 = 'row2' ")
cur.execute("delete from  table  where row1 = 'row1' ")

因单引号“'”用于SQL语句中的标识,所以,python中的字符串需使用双引号括住。
此外,也可以使用python的“格式化字符串”写法,简化命令,例如:
cur.execute("update  table set   row1 = '%s'  where  row2 = '%s' " %('value1','value2'))

※请注意,'%s'的单引号是SQL语句的间隔符,'value1'的单引号是python的字符串间隔符,其含义是不同的。是否需要间隔符,以及使用双引号还是单引号作为间隔,需根据其含义决定。例如,还有:
cur.execute("update FTPUSERS set passwd=%s where userid='%s' " %("md5('123')",'user2'))

这里,paswd=%s是因SQL的md5()函数是不需要单引号间隔的;"md5('123')"是python的字符串中含有单引号,所以用双引号括住。

提交修改
一般情况下,MySQLdb模块会自动提交修改。但我们在更新数据后,手动运行一次:
conn.commit()

关闭数据库连接
需要分别的关闭指针对象和连接对象.他们有名字相同的方法
cursor.close()
conn.close()


参考链接:
http://www.cnblogs.com/sislcb/archive/2008/11/24/1339913.html
http://www.linuxfly.org/post/180/
http://www.3gmatrix.cn/4/viewspace-16757.html
Python 数据库开发 - 天生我材必有用,千金散尽还复来 - JavaEye技术网站 python包包收集 - shake863 - JavaEye技术网站 mencoder转flv - python mplayer ffmpeg vp6 - JavaEye技术网站 python类型转换、数值操作 - canofy - JavaEye技术网站 常用内存数据库介绍(一) - titan - JavaEye技术网站 常用内存数据库介绍(二) - titan - JavaEye技术网站 常用内存数据库介绍(四) - titan - JavaEye技术网站 常用内存数据库介绍(五) - titan - JavaEye技术网站 常用内存数据库介绍(七) - titan - JavaEye技术网站 常用内存数据库介绍(六) - titan - JavaEye技术网站 常用内存数据库介绍(八) - titan - JavaEye技术网站 网站开发框架的选择,以及我们为什么选择Django/Python|架构|技术|Python| web开发框架以及分层 - moutan - JavaEye技术网站 一步一步开发liferay笔记 - thomas0988 - JavaEye技术网站 java开发注意事项 - Java的研发路程 - JavaEye技术网站 MyEclipse Spring Hibernate整合开发 - liuxinglanyue - JavaEye技术网站 卡布奇诺 - JavaEye技术网站 非常全面的实用JavaScript开发工具列表 - kunlunx - JavaEye技术网站 使用 Apache MINA 开发高性能网络应用程序[转] - - JavaEye技术网站 SDL游戏开发教程01(环境准备 mingw eclipse) - - JavaEye技术网站 JSTL使用 - - JavaEye技术网站 enum用法 - - JavaEye技术网站 ant 安装 - - JavaEye技术网站 负载均衡技术 - - JavaEye技术网站