-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQueryTool.py
102 lines (78 loc) · 2.91 KB
/
QueryTool.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import sqlite3
from Utility import SingletonDecorator
@SingletonDecorator
class QueryTool():
def __init__(self):
self.dbConnection = sqlite3.connect("daten.db")
with self.dbConnection as con:
self.db = con.cursor()
def query(self,queryString:str, *params)->sqlite3.Cursor:
return self.db.execute(queryString, params)
def queryAndFetch(self,queryString:str, *params)->list:
return self.query(queryString, *params).fetchall()
def chainedQuery(self, querys:tuple, index:int=0, *params)->list:
current = querys[index]
data = self.query(current,params).fetchall()
if len(querys)<=index:
return data
else:
return self.chainedQuery(querys=querys, index=index+1, *data)
def insert(self,table: str, **data)->sqlite3.Cursor:
newID = self.numEntryInTable(table)
params = (newID,)
query = "INSERT INTO "+table+" (ID,"+ (",".join(data.keys())) +") VALUES ("
for k,v in data.items():
query += "?,"
params += (v,)
query += "?)"
ret = self.query(query, *params)
self.dbConnection.commit()
return ret
def update(self,table: str, ID: int, **data)->sqlite3.Cursor:
query = "UPDATE "+table+" SET "
params = ()
for k,v in data.items():
query += k+"=?, "
params += (v,)
query = query[0:-2]
query += " WHERE ID=?"
params += (ID,)
ret = self.query(query, *params)
self.dbConnection.commit()
return ret
def numEntryInTable(self, table: str)->int:
l = self.query("SELECT ID FROM "+table).fetchall()
flatten = lambda *n: (e for a in n for e in(flatten(*a) if isinstance(a,(tuple,list)) else (a,)))
l2 = list(flatten(l))
try:
return max(l2)+1
except ValueError:
return 1
def fetchOneCol2List(self, table: str, col: str)->list:
query = "SELECT "+col+" FROM "+table
ret = []
for i in self.query(query).fetchall():
ret.append(i[0])
return ret
def fetchAll(self, table: str)->list:
query = "SELECT * FROM "+table
return self.query(query).fetchall()
def fetchAllByWhere(self, table: str, **where)->list:
query = "SELECT * FROM "+table+" WHERE "
params = ()
for k,v in where.items():
query += k+"=? AND "
params += (v,)
query = query[0:-5]
return self.query(query, *params).fetchall()
def queryByNames(self, VName: str, Name: str):
query = "SELECT * FROM LG_NGD WHERE Name=? AND Vorname=?"
ret = []
for i in self.query(query,VName,Name).fetchall():
ret.append(i)
for i in self.query(query,Name,VName).fetchall():
ret.append(i)
if(len(ret) !=1):
return None
else:
return ret[0]