-
Notifications
You must be signed in to change notification settings - Fork 0
/
m_database.py
220 lines (198 loc) · 10.1 KB
/
m_database.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
import sqlite3
class ConnectDatabase():
def __init__(self, db_file) -> None:
try:
self.conn = sqlite3.connect(db_file)
except sqlite3.Error as e:
self.conn = None
assert self.conn is not None, "sqlite3.Error when create connection to your database"
def queryRowsShoppingList(self):
cur = self.conn.cursor()
cur.execute("SELECT * FROM ShoppingList;")
row = cur.fetchall()
return row
def deleteRowShoppingList(self, id):
try:
cur = self.conn.cursor()
cur.execute("DELETE FROM ShoppingList WHERE ID = (?);", (id,))
except BaseException:
print('activity is incomplete - deleteRowShoppingList')
finally:
self.conn.commit()
def insertRowShoppingList(self, title):
try:
cur = self.conn.cursor()
cur.execute(
"INSERT INTO ShoppingList (itemTitle) VALUES (?)",
(title,))
except sqlite3.IntegrityError:
print('activity is incomplete - insertRowTransactions')
finally:
self.conn.commit()
cur = self.conn.cursor()
cur.execute("SELECT seq FROM sqlite_sequence WHERE name='ShoppingList'")
row = cur.fetchone()[0]
return row
def insertRowTransactions(self, _time, title, paymentMethod, trancTag, amount):
try:
cur = self.conn.cursor()
cur.execute(
"INSERT INTO Transactions (trancTime, trancTitle, trancPaymentMethod, trancTag, amount) VALUES ((?), (?), (?), (?), (?))",
(_time, title, paymentMethod, trancTag, amount))
except sqlite3.IntegrityError:
print('activity is incomplete - insertRowTransactions')
finally:
self.conn.commit()
cur = self.conn.cursor()
cur.execute("SELECT seq FROM sqlite_sequence WHERE name='Transactions'")
row = cur.fetchone()[0]
return row
def queryRowsTransactions(self, _from=None, _to=None):
cur = self.conn.cursor()
if (_from is None) and (_to is None):
cur.execute("SELECT * FROM Transactions ORDER BY trancTime ASC;")
elif (_from is not None) and (_to is None):
cur.execute("SELECT * FROM Transactions WHERE trancTime >= (?) ORDER BY trancTime ASC;", (_from,))
elif (_from is None) and (_to is not None):
cur.execute("SELECT * FROM Transactions WHERE trancTime <= (?) ORDER BY trancTime ASC;", (_to,))
else:
cur.execute("SELECT * FROM Transactions WHERE (trancTime >= (?) AND trancTime <= (?)) ORDER BY trancTime ASC;", (_from, _to))
row = cur.fetchall()
return row
def querySumTransactionInEachTag(self, _from=None, _to=None):
cur = self.conn.cursor()
if (_from is None) and (_to is None):
cur.execute("SELECT trancTag, sum(amount) FROM Transactions GROUP BY trancTag;")
elif (_from is not None) and (_to is None):
cur.execute("SELECT trancTag, sum(amount) FROM Transactions WHERE trancTime >= (?) GROUP BY trancTag;", (_from,))
elif (_from is None) and (_to is not None):
cur.execute("SELECT trancTag, sum(amount) FROM Transactions WHERE trancTime <= (?) GROUP BY trancTag;", (_to,))
else:
cur.execute("SELECT trancTag, sum(amount) FROM Transactions WHERE trancTime >= (?) AND trancTime <= (?) GROUP BY trancTag;", (_from, _to))
row = cur.fetchall()
return row
def querySumExpensesInEachTag(self, _from=None, _to=None):
cur = self.conn.cursor()
if (_from is None) and (_to is None):
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
GROUP BY trancTag) AS E
WHERE E.trancTag NOT IN ('Salary', 'Other Income');""", )
elif (_from is not None) and (_to is None):
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
WHERE trancTime >= (?)
GROUP BY trancTag) AS E
WHERE E.trancTag NOT IN ('Salary', 'Other Income');""", (_from,))
elif (_from is None) and (_to is not None):
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
WHERE trancTime <= (?)
GROUP BY trancTag) AS E
WHERE E.trancTag NOT IN ('Salary', 'Other Income');""", (_to,))
else:
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
WHERE trancTime >= (?)
AND trancTime <= (?)
GROUP BY trancTag) AS E
WHERE E.trancTag NOT IN ('Salary', 'Other Income');""", (_from, _to))
row = cur.fetchall()
return row if row else [("Other", 0)]
def querySumExpenses(self, _from=None, _to=None):
cur = self.conn.cursor()
if (_from is None) and (_to is None):
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE trancTag NOT IN ('Salary', 'Other Income');""", )
elif (_from is not None) and (_to is None):
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE (trancTag NOT IN ('Salary', 'Other Income'))
AND (trancTime >= (?));""", (_from,))
elif (_from is None) and (_to is not None):
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE (trancTag NOT IN ('Salary', 'Other Income'))
AND (trancTime <= (?));""", (_to,))
else:
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE (trancTag NOT IN ('Salary', 'Other Income'))
AND (trancTime >= (?))
AND (trancTime <= (?));""", (_from, _to))
row = cur.fetchone()[0]
return 0 if row is None else row
def querySumIncomeInEachTag(self, _from=None, _to=None):
cur = self.conn.cursor()
if (_from is None) and (_to is None):
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
GROUP BY trancTag) AS E
WHERE E.trancTag IN ('Salary', 'Other Income');""", )
elif (_from is not None) and (_to is None):
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
WHERE trancTime >= (?)
GROUP BY trancTag) AS E
WHERE E.trancTag IN ('Salary', 'Other Income');""", (_from,))
elif (_from is None) and (_to is not None):
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
WHERE trancTime <= (?)
GROUP BY trancTag) AS E
WHERE E.trancTag IN ('Salary', 'Other Income');""", (_to,))
else:
cur.execute("""SELECT *
FROM
(SELECT trancTag, sum(amount) AS sum
FROM Transactions
WHERE trancTime >= (?)
AND trancTime <= (?)
GROUP BY trancTag) AS E
WHERE E.trancTag IN ('Salary', 'Other Income');""", (_from, _to))
row = cur.fetchall()
return row if row else [("Other Income", 0)]
def querySumIncome(self, _from=None, _to=None):
cur = self.conn.cursor()
if (_from is None) and (_to is None):
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE trancTag IN ('Salary', 'Other Income');""", )
elif (_from is not None) and (_to is None):
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE (trancTag IN ('Salary', 'Other Income'))
AND (trancTime >= (?));""", (_from,))
elif (_from is None) and (_to is not None):
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE (trancTag IN ('Salary', 'Other Income'))
AND (trancTime <= (?));""", (_to,))
else:
cur.execute("""SELECT sum(amount) AS sum
FROM Transactions
WHERE (trancTag IN ('Salary', 'Other Income'))
AND (trancTime >= (?))
AND (trancTime <= (?));""", (_from, _to))
row = cur.fetchone()[0]
return 0 if row is None else row
def queryMinTransactionTime(self):
cur = self.conn.cursor()
cur.execute("SELECT min(trancTime) FROM Transactions;")
row = cur.fetchone()
return row[0]