-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.py
More file actions
92 lines (72 loc) · 2.41 KB
/
Copy pathdatabase.py
File metadata and controls
92 lines (72 loc) · 2.41 KB
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
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import sqlite3 as sql
from os.path import exists
from db_objects import makeAccount, makeFund, makeUnitPurchase, makeAccountValue
#%%
def createDB(filename):
"Creates sqlite db. Returns false if file already exists, otherwise returns db connection object"
if exists(filename):
return False
else:
con = sql.Connection(filename)
initializeDB(con)
return con
def connectDB(filename):
"Connects to existing db. Returns false if db doesn't exist, otherwise returns connection object"
if exists(filename):
return sql.Connection(filename)
else:
return False
def initializeDB(con):
"Creates initial tables in new db. Throws error if database previously initalized"
initializeAcctTable(con)
initializeFundTable(con)
initializeAccountValueTable(con)
initializeUnitPurchaseTable(con)
def initializeAcctTable(con):
"Creates account table in db"
con.execute("""
CREATE TABLE Accounts (
id integer PRIMARY KEY,
name text,
brokerage text,
account_no text)""")
def initializeFundTable(con):
"Creates Fund Table in db"
con.execute("""
CREATE TABLE Funds (
id integer PRIMARY KEY,
name text,
initial_units,
account_id integer)""")
def initializeAccountValueTable(con):
"Creates AccountValue table in db"
con.execute("""
CREATE TABLE AccountValue (
id integer PRIMARY KEY,
date text,
value float,
account_id integer)""")
def initializeUnitPurchaseTable(con):
"Creates Transaction table in db"
con.execute("""
CREATE TABLE UnitPurchase (
id integer PRIMARY KEY,
fund_id integer,
amount decimal,
date_id integer)""")
def fetchAccounts(con):
accounts = []
cursor = con.cursor()
for row in cursor.execute("SELECT id, name, brokerage, account_no from Accounts "):
accounts += [makeAccount(row)]
return accounts