python with语句使用示例,pythonwith,下面代码中的Entry类
python with语句使用示例,pythonwith,下面代码中的Entry类
下面代码中的Entry类存放数据,SQLAction类用来封装MySQLdb来简化数据库操作的代码
#!/usr/bin/env python# -*- coding:utf-8 -*-# author: lintaoimport MySQLdbfrom gensql import gensqlfrom Entry import Entryclass Error(Exception): passclass SQLAction(object): def __init__(self, logininfo): self.__login(logininfo) self.__entryies = {} self.cursor = {} def __login(self, logininfo): try: self.conn = MySQLdb.connect( **logininfo) except: raise Error,"Login failed" def execute(self, sql, tablename): self.cursor[tablename] = self.conn.cursor() self.cursor[tablename].execute(sql) def commit(self): self.conn.commit() def __describe(self, tablename): sql = "describe %s;"%tablename self.execute(sql, tablename) return list(i[0] for i in self.cursor[tablename].fetchall()) pass # Begin with statement, select def select(self, tablename, conddicts=None): return self.innerSelect(self, tablename, conddicts) class innerSelect(object): def __init__(self, outer, tablename, cond=None): self.outer = outer self.tablename = tablename self.cond = cond self.entry = self.outer.getentry(self.tablename) self.select() def select(self): sql = gensql("select", \ self.tablename, \ self.entry.getfield(), \ self.cond) #print sql self.outer.execute(sql, self.tablename) pass def next(self): tmpone = self.outer.cursor[self.tablename].fetchone() if not tmpone: return False with self.entry.edit(): self.entry.update(dict(zip(self.entry.getfield(), tmpone))) self.entry.enablequery() return True def __enter__(self): self.entry.enablequery() return self pass def __getitem__(self, key): return self.entry[key] def __setitem__(self, key, value): raise Error, "Can't set key and value" def __exit__(self, exc_type, exc_value, traceback): self.entry.disablequery() pass # End with statement, select # Begin with statement, update def update(self, tablename, conddicts): return self.innerUpdate(self, tablename, conddicts) class innerUpdate(object): def __init__(self, outer, tablename, cond): self.outer = outer self.tablename = tablename self.cond = cond self.entry = self.outer.getentry(self.tablename) self.select() def __getitem__(self, key): return self.entry[key] def __setitem__(self, key, value): self.entry[key] = value def select(self): sql = gensql("select", \ self.tablename, \ self.entry.getfield(), \ self.cond) #print sql self.outer.execute(sql, self.tablename) pass def next(self): tmpone = self.outer.cursor[self.tablename].fetchone() if not tmpone: return False with self.entry.edit(): self.entry.update(dict(zip(self.entry.getfield(), tmpone))) self.entry.enableedit() self.oldentry = self.entry.copydict() return True def update(self): sql = gensql("update", \ self.tablename, \ self.entry.copydict(), \ self.oldentry) self.outer.execute(sql, self.tablename) self.outer.commit() pass def ok(self): self.update() def __enter__(self): self.entry.enableedit() return self pass def __exit__(self, exc_type, exc_value, traceback): self.entry.disableedit() pass # End with statement, update # Begin with statement, insert def insert(self, tablename): return self.innerInsert(self, tablename) class innerInsert(object): def __init__(self, outer, tablename): self.outer = outer self.tablename = tablename self.entry = self.outer.getentry(self.tablename) def __enter__(self): self.entry.enableedit() return self pass def __getitem__(self, key): return self.entry[key] def __setitem__(self, key, value): self.entry[key] = value def ok(self): self.insert() def insert(self): sql = gensql("insert", \ self.tablename, \ self.entry.copydict()) self.outer.execute(sql, self.tablename) self.outer.commit() def __exit__(self, exc_type, exc_value, traceback): self.entry.disableedit() pass # End with statement, insert def newentry(self, tablename): self.__entryies[tablename] = Entry(self.__describe(tablename)) def getentry(self, tablename): return self.__entryies.get(tablename, None)if __name__ == "__main__": logininfo = {"user":"lint", "host":"localhost", "passwd":"123456", "db":"TestBesBkk"} sqlaction = SQLAction(logininfo) sqlaction.newentry("person") oneentry = sqlaction.getentry("person") #with oneentry.edit(): # oneentry["id_p"] = "5" # oneentry["name_p"] = "lint07" # oneentry["age"] = 22 #with oneentry.query(): # print oneentry["id_p"] # print oneentry["name_p"] # print oneentry["age"] #print sqlaction.cursor #with sqlaction.insert("person") as s: # s["id_p"] = 1000 # s["name_p"] = "lintao07" # s["age"] = 22222 # s.ok() with sqlaction.update("person", {"id_p":1000}) as s: while s.next(): s["name_p"] = s["name_p"] + str(s["age"]) s["age"] = 55555 s.ok() #with sqlaction.select("person", None) as s: # print s.entry.getfield() # while s.next(): # print s["id_p"] # print s["name_p"] # print s["age"] # #print s["noage"]
相关内容
- python动态修改类方法的执行逻辑,python动态逻辑,下面的
- 获取文件夹大小的python代码,获取python代码,import osfr
- easy_install 指定版本安装包,easy_install安装包,easy_insta
- python beautifulsoup分析网页示例,,beautifulsoa
- python破解验证码,python验证码,有开源的tesserac
- python easy_install 发生Unable to find vcvarsall.bat错误的处理方
- python错误处理记录完整的异常堆栈信息,python错误堆栈
- python使用深拷贝和浅拷贝复制对象,python拷贝,使用co
- easy_install 升级包,easy_install,easy_install
- easy_install 的n种用法,easy_install用法,easy_install
评论关闭