python sqlite库_python-整理--sqlite数据库访问

1 '''

2 2016年2月5日3 描述: 操作sqlite数据库的封装4 主要功能: 将sqlite数据库数据转为python对象集合5 错误日志: 如果在操作过程中发生了错误,将会在当前目录下产生dblog目录,并记载.6

7 步骤: 执行一个完整的数据操作需要:建立连接->得到游标->执行sql->分析结果8 第二个步骤和ado.net不一样,游标类的作用有点类似于SqlDataReader,有方法可从中读取结果集9 结果: 执行SELECT会得到一个含有Model对象的列表,对象的属性名是SQL语句查询的字段名,值是字段值10 Model是一个空对象,它的属性都是动态加上去的,在得到结果集之后.11 '''

12

13 importos14 importsqlite315 from Loggers.MyLog importMyLog16 from DBA.Model importModel17

18 classSQLiteDBA:19 '''操作sqlite的类'''

20 #21 def __init__(self,connstr=None):22 '''// 初始化 主要是传入连接字符串23 // 1. connstr:数据库连接串.就是sqlite文件所在的路径24 '''

25 #连接字符串

26 self.__ConnStr=connstr27 #当前连接

28 self.__Conn=None29 #游标

30 self.__Cur=None31

32 #33 def ExecuteQuery(self,sql,*paras,EntityClass=None,paraClass=None):34 '''// 执行一个查询,返回结果集.如果没有结果或者发生了异常返回None35 // 1. sql:sql语句36 // 2. *paras:参数元组,列表37 // 3. EntityClass:传入实体类,直接写上类名就行.需要写成命名方式EntityClass=XXX38 // 4. paraClass:实体类参数 需要写成命名方式paraClass=XXX39 '''

40 self.__OpenDB()41 try:42 #执行语句

43 if paraClass is notNone:44 self.__Cur.execute(sql,paraClass.__dict__)45 else:46 self.__Cur.execute(sql,paras)47 #包含查出的所有记录数

48 data=self.__Cur.fetchall()49 #如果结果集为空

50 if(len(data)==0):returnNone51

52 ## 将结果集和列名绑定到model上.

53

54 #包含col列信息,这返回的是二维元组,每个元组的元素都是一个有七个值的元组.其中第1个值是列名.顺序和SQL语句查询列名顺序一致

55 colinfo=self.__Cur.description56 #建立空列表放实体对象,datalist=[]也可以

57 datalist=list()58 if(EntityClass is None):EntityClass=Model59 #循环赋值

60 for row indata:61 m=EntityClass()62 for colindex inrange(len(row)):63 m.__dict__[colinfo[colindex][0]]=row[colindex]64 #add m

65 datalist.append(m)66 #返回结果对象列表

67 returndatalist68 exceptsqlite3.Error as e:69 MyLog.AddLog('在[ {0} ]数据库执行查询时发生异常.[{1}]'.format(self.__ConnStr,e.args[0]))70 returnNone71 finally:72 self.__CloseDB()73

74 #75 def ExecuteScalar(self,sql,*paras,paraClass=None):76 '''

77 // 执行一个查询返回单个值.DBNULL或者异常都返回None78 // 1. sql:sql语句79 // 2. *paras:参数元组,列表80 // 3. paraClass:实体类参数 需要写成命名方式paraClass=XXX81 '''

82 self.__OpenDB()83 try:84 #执行语句

85 if paraClass is notNone:86 self.__Cur.execute(sql,paraClass.__dict__)87 else:88 self.__Cur.execute(sql,paras)89 #包含查出的所有记录数

90 data=self.__Cur.fetchall()91 #如果结果集为空

92 if(len(data)==0):returnNone93 #返回单个值 数据库字符值为NULL时,或者值为空字符(要转成字符串后再判断为空)时的情况

94 if(data[0][0] is None):returnNone95 if(len(str(data[0][0]))==0):returnNone96 returndata[0][0]97 exceptsqlite3.Error as e:98 MyLog.AddLog('在[ {0} ]数据库执行单值查询时发生异常.[{1}]'.format(self.__ConnStr,e.args[0]))99 returnNone100 finally:101 self.__CloseDB()102 #103 def ExecuteNoQuery(self,sql,*paras,paraClass=None):104 '''// 执行一个非查询,返回受影响的行数.如果发生异常,返回None105 // 1.sql:sql语句106 // 2. *paras:参数元组,列表107 // 3. paraClass:实体类参数 需要写成命名方式paraClass=XXX108 '''

109 self.__OpenDB()110 try:111 #执行语句

112 if paraClass is notNone:113 self.__Cur.execute(sql,paraClass.__dict__)114 else:115 self.__Cur.execute(sql,paras)116 #非查询需要提交事务

117 cou=self.__Cur.rowcount118 self.__Conn.commit()119 #return self.__Cur.rowcount

120 returncou121 exceptsqlite3.Error as e:122 MyLog.AddLog('在[ {0} ]数据库执行非查询时发生异常.[{1}]'.format(self.__ConnStr,e.args[0]))123 returnNone124 finally:125 self.__CloseDB()126 #127 def __OpenDB(self):128 '''打开数据库连接'''

129 if not os.path.exists(self.__ConnStr):130 MyLog.AddLog('在指定的路径[ {0} ]上没有找到数据库文件.'.format(self.__ConnStr))131 try:132 self.__Conn = sqlite3.connect(self.__ConnStr)133 exceptsqlite3.Error as e:134 MyLog.AddLog('打开[ {0} ]数据库失败.[{1}]'.format(self.__ConnStr,e.args[0]))135 #设置游标对象

136 self.__Cur=self.__Conn.cursor()137

138 #139 def __CloseDB(self):140 '''关闭数据库连接和游标'''

141 self.__Cur.close()142 self.__Conn.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值