jlzzjlzz亚洲乱熟在线播放

系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 數據庫 > SQLite > 詳細頁面

Python帶動態參數功能的sqlite工具類

時間:2019-12-04來源:系統城作者:電腦系統城

本文實例講述了Python帶動態參數功能的sqlite工具類。分享給大家供大家參考,具體如下:

最近在弄sqlite和python

在網上參考各教程后,結合以往java jdbc數據庫工具類寫出以下python連接sqlite的工具類

寫得比較繁瑣 主要是想保留一種類似java的Object…args動態參數寫法 并兼容數組/list方式傳遞不定個數參數 并且返回值是List形式 dict字典 以便和JSON格式互相轉換

在python中有一些區別 經過該工具類封裝之后可以有以下用法:


 
  1. db.executeQuery("s * f t w id=? and name=?", "id01", "name01");//動態參數形式
  2. db.executeQuery("s * f t w id=? and name=?", ("id01", "name01"));//tuple元組式 等價上面 括號可省略
  3. db.executeQuery("s * f t w id=? and name=?", ["id01", "name01"]);//list數組形式

完整Python代碼如下:


 
  1. #!/usr/bin/python
  2. #-*- coding:utf-8 -*-
  3. import sqlite3
  4. import os
  5. #
  6. # 連接數據庫幫助類
  7. # eg:
  8. # db = database()
  9. # count,listRes = db.executeQueryPage("select * from student where id=? and name like ? ", 2, 10, "id01", "%name%")
  10. # listRes = db.executeQuery("select * from student where id=? and name like ? ", "id01", "%name%")
  11. # db.execute("delete from student where id=? ", "id01")
  12. # count = db.getCount("select * from student ")
  13. # db.close()
  14. #
  15. class database :
  16. dbfile = "sqlite.db"
  17. memory = ":memory:"
  18. conn = None
  19. showsql = True
  20. def __init__(self):
  21. self.conn = self.getConn()
  22. #輸出工具
  23. def out(self, outStr, *args):
  24. if(self.showsql):
  25. for var in args:
  26. if(var):
  27. outStr = outStr + ", " + str(var)
  28. print("db. " + outStr)
  29. return
  30. #獲取連接
  31. def getConn(self):
  32. if(self.conn is None):
  33. conn = sqlite3.connect(self.dbfile)
  34. if(conn is None):
  35. conn = sqlite3.connect(self.memory)
  36. if(conn is None):
  37. print("dbfile : " + self.dbfile + " is not found && the memory connect error ! ")
  38. else:
  39. conn.row_factory = self.dict_factory #字典解決方案
  40. self.conn = conn
  41. self.out("db init conn ok ! ")
  42. else:
  43. conn = self.conn
  44. return conn
  45. #字典解決方案
  46. def dict_factory(self, cursor, row):
  47. d = {}
  48. for idx, col in enumerate(cursor.description):
  49. d[col[0]] = row[idx]
  50. return d
  51. #關閉連接
  52. def close(self, conn=None):
  53. res = 2
  54. if(not conn is None):
  55. conn.close()
  56. res = res - 1
  57. if(not self.conn is None):
  58. self.conn.close()
  59. res = res - 1
  60. self.out("db close res : " + str(res))
  61. return res
  62. #加工參數tuple or list 獲取合理參數list
  63. #把動態參數集合tuple轉為list 并把單獨的傳遞動態參數list從tuple中取出作為參數
  64. def turnArray(self, args):
  65. #args (1, 2, 3) 直接調用型 exe("select x x", 1, 2, 3)
  66. #return [1, 2, 3] <- list(args)
  67. #args ([1, 2, 3], ) list傳入型 exe("select x x",[ 1, 2, 3]) len(args)=1 && type(args[0])=list
  68. #return [1, 2, 3]
  69. if(args and len(args) == 1 and (type(args[0]) is list) ):
  70. res = args[0]
  71. else:
  72. res = list(args)
  73. return res
  74. #分頁查詢 查詢page頁 每頁num條 返回 分頁前總條數 和 當前頁的數據列表 count,listR = db.executeQueryPage("select x x",1,10,(args))
  75. def executeQueryPage(self, sql, page, num, *args):
  76. args = self.turnArray(args)
  77. count = self.getCount(sql, args)
  78. pageSql = "select * from ( " + sql + " ) limit 5 offset 0 "
  79. #args.append(num)
  80. #args.append(int(num) * (int(page) - 1) )
  81. self.out(pageSql, args)
  82. conn = self.getConn()
  83. cursor = conn.cursor()
  84. listRes = cursor.execute(sql, args).fetchall()
  85. return (count, listRes)
  86. #查詢列表array[map] eg: [{'id': u'id02', 'birth': u'birth01', 'name': u'name02'}, {'id': u'id03', 'birth': u'birth01', 'name': u'name03'}]
  87. def executeQuery(self, sql, *args):
  88. args = self.turnArray(args)
  89. self.out(sql, args)
  90. conn = self.getConn()
  91. cursor = conn.cursor()
  92. res = cursor.execute(sql, args).fetchall()
  93. return res
  94. #執行sql或者查詢列表 并提交
  95. def execute(self, sql, *args):
  96. args = self.turnArray(args)
  97. self.out(sql, args)
  98. conn = self.getConn()
  99. cursor = conn.cursor()
  100. #sql占位符 填充args 可以是tuple(1, 2)(動態參數數組) 也可以是list[1, 2] list(tuple) tuple(list)
  101. res = cursor.execute(sql, args).fetchall()
  102. conn.commit()
  103. #self.close(conn)
  104. return res
  105. #查詢列名列表array[str] eg: ['id', 'name', 'birth']
  106. def getColumnNames(self, sql, *args):
  107. args = self.turnArray(args)
  108. self.out(sql, args)
  109. conn = self.getConn()
  110. if(not conn is None):
  111. cursor = conn.cursor()
  112. cursor.execute(sql, args)
  113. res = [tuple[0] for tuple in cursor.description]
  114. return res
  115. #查詢結果為單str eg: 'xxxx'
  116. def getString(self, sql, *args):
  117. args = self.turnArray(args)
  118. self.out(sql, args)
  119. conn = self.getConn()
  120. cursor = conn.cursor()
  121. listRes = cursor.execute(sql, args).fetchall()
  122. columnNames = [tuple[0] for tuple in cursor.description]
  123. #print(columnNames)
  124. res = ""
  125. if(listRes and len(listRes) >= 1):
  126. res = listRes[0][columnNames[0]]
  127. return res
  128. #查詢記錄數量 自動附加count(*) eg: 3
  129. def getCount(self, sql, *args):
  130. args = self.turnArray(args)
  131. sql = "select count(*) cc from ( " + sql + " ) "
  132. resString = self.getString(sql, args)
  133. res = 0
  134. if(resString):
  135. res = int(resString)
  136. return res
  137. ####################################測試
  138. def main():
  139. db = database()
  140. db.execute(
  141. '''
  142. create table if not exists student(
  143. id text primary key,
  144. name text not null,
  145. birth text
  146. )
  147. '''
  148. )
  149. for i in range(10):
  150. db.execute("insert into student values('id1" + str(i) + "', 'name1" + str(i) + "', 'birth1" +str(i) + "')")
  151. db.execute("insert into student values('id01', 'name01', 'birth01')")
  152. db.execute("insert into student values('id02', 'name02', 'birth01')")
  153. db.execute("insert into student values('id03', 'name03', 'birth01')")
  154. print(db.getColumnNames("select * from student"))
  155. print(db.getCount("select * from student " ))
  156. print(db.getString("select name from student where id = ? ", "id02" ))
  157. print(db.executeQuery("select * from student where 1=? and 2=? ", 1, 2 ))
  158. print(db.executeQueryPage("select * from student where id like ? ", 1, 5, "id0%"))
  159. db.execute("update student set name='nameupdate' where id = ? ", "id02")
  160. db.execute("delete from student where id = ? or 1=1 ", "id01")
  161. db.close()
  162. if __name__ == '__main__':
  163. main()
  164.  

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python操作SQLite數據庫技巧總結》、《Python常見數據庫操作技巧匯總》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載