【Python】Mysql数据库操作类
来源:互联网 发布:二维码 调用数据库 编辑:程序博客网 时间:2024/04/27 22:53
在《【Python】Windows平台下Python、Pydev连接Mysql数据库》(点击打开链接)中介绍了如何为Python与Eclipse中的Pydev环境增加Mysql的操作能力。
下面为Python的Mysql数据库操作设置一个类,以后每次使用就不会将代码写得七零八落了,尽管Python是简直有爱的脚本语言,但还是要将代码写得尽可能好看。
还是完成《【Java】利用单例模式、可变参数优化Java操作Mysql数据库、JDBC代码的写作》(点击打开链接)中的事情,同样在test数据库中有张用烂的usertable表:
里面有11条数据如下:
我们同样要在Python完成对这张表的增删改查。
只是Python中所有类成员没有公有私有的概念,也无法将构造函数私有化,这里写不成单例模式。
具体程序如下:
#-*-coding:utf-8-*-import MySQLdb#数据库操作类class DB: conn=None;#这里的None相当于其它语言的NULL def __init__(self):#构造函数 self.conn=MySQLdb.connect(host="127.0.0.1",user="pc",passwd="admin",db="test",port=3306); #数据库连接,localhost python不认,必须127.0.0.1 def getBySql(self,sql,*param): cursor=self.conn.cursor();#初始化游标 result=cursor.fetchmany(cursor.execute(sql,param)); self.conn.commit();#提交上面的sql语句到数据库执行 return result; def getBySql_result_unique(self,sql,*param): cursor=self.conn.cursor();#初始化游标 result=cursor.fetchmany(cursor.execute(sql,param)); self.conn.commit();#提交上面的sql语句到数据库执行 return result[0][0]; def setBySql(self,sql,*param): cursor=self.conn.cursor();#初始化游标 cursor.execute(sql,param); self.conn.commit();#提交上面的sql语句到数据库执行 def __del__(self):#析构函数 self.conn.close();#关闭数据库连接#主程序 db=DB();print "usertable中的条目数:"print db.getBySql_result_unique("select count(*) from usertable");print "usertable中id大于4的结果:"result=db.getBySql("select * from usertable where id>%s",4)for row in result: for cell in row: print str(cell)+",", print;#增删改实例:db.setBySql("insert into usertable(username,password) values(%s,%s)","ff","s");
运行结果如下:
在主程序中先实例化DB Mysql数据库操作类。
在这个数据库操作类的构造函数中先建立数据库连接,增删改这样无数据返回的操作,初始化游标之后,直接利用execute(self, query, args):执行单条sql语句就行,其实这个函数的返回值就是受影响的行数,唯一需要清晰就是(或者说是我感到奇怪的是),在执行完插入或删除或修改操作后,需要调用一下conn.commit()方法进行提交。这样,数据才会真正保存在数据库中。我不清楚是否是我的mysql设置问题,总之,如果不用commit,那数据就不会保留在数据库中,但是,数据确实在数据库呆过。因为自动编号进行了累积,而且返回的受影响的行数并不为0。反正记住Python要求所有数据库操作必须commit就是。所以打包成这样的一个类,在主函数直接调用这个方法,你就不用每次submit了。
这里利用到《【Python】构造函数、析构函数与可变参数传递》(点击打开链接)接受变长参数,如同C语言的printf函数一样,后面的参数自动替换%s,虽然一般python不会用来写web,但是主要利用到python的变量类型自动转化的特性,你无须关注变量类型。换句话说,要注意的是,无论你要插入的数据是什么类型,占位符永远都要用%s。
对于有返回值的select语言,在cursor.execute()之后还要通过cursor.fetchmany()返回一个二维数组。将返回的结果集,一张表,自动存放的一个可变长的list之后。得到这个list自行遍历即可。
这里特意开一个方法,针对只有一个结果返回的查询。直接取其[0][0]位置,得到查询得到的唯一结果。尽管python还有其它方法,例如fetchone等,但个人感觉并不好使。
上述程序完成基本的增删改查CRUD,增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写,足够!
- 【Python】Mysql数据库操作类
- python操作mysql数据库类
- Python操作Mysql数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python操作MySQL数据库
- python 操作mysql 数据库
- python操作mysql数据库
- python 操作 mysql数据库
- python操作MySQL数据库
- python操作MySQL数据库
- Python操作MySQL数据库
- 浅谈屏幕适配之measure(上)
- GrabCut in One Cut(基于图割算法grabcut的一次快速图像分割的OpenCV实现)----目前效果最好的图割
- 阻止资深程序员技术进步的最大敌人就是开始做管理,做管理至少毁了中国90%的好程序员。
- 杭电ACM1003
- Struts教程(一):搭建Struts环境,初步使用Struts
- 【Python】Mysql数据库操作类
- error C2440: “static_cast”: 无法从“void (__thiscall CVCadView::* )(int)”转换为“void (__thiscall CCmdTarget
- NP完全问题
- 小刚之问引发的思索
- 获得每日,每周,每月的0点和24点的时间戳
- [BZOJ1787][Ahoi2008]Meet 紧急集合&&[BZOJ1832][AHOI2008]聚会
- 1008. Elevator (20)
- 源码解析EventBus
- iOS开发49-iOS Mac OS X Openfire的安装与卸载