You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.5 KiB
49 lines
1.5 KiB
from dateutil.parser import parse as date_parse
|
|
import csv
|
|
import re
|
|
import sqlite3
|
|
noise = re.compile(r' {3,}.*')
|
|
def __init_db__(path):
|
|
con = sqlite3.connect(path)
|
|
cur = con.cursor()
|
|
cur.execute('''
|
|
CREATE TABLE IF NOT EXISTS `transactions` (
|
|
`details` STRING,
|
|
`date` STRING,
|
|
`amount` REAL,
|
|
`type` STRING,
|
|
`cOs_num` INTEGER,
|
|
UNIQUE(
|
|
`details`,
|
|
`date`,
|
|
`type`,
|
|
`amount`,
|
|
`cOs_num`));''')
|
|
con.commit()
|
|
return con
|
|
|
|
class browser:
|
|
def __init__(self,db_path):
|
|
|
|
self.db_path = db_path
|
|
self.con = __init_db__(db_path)
|
|
self.con.row_factory = sqlite3.Row
|
|
self.cur = self.con.cursor()
|
|
|
|
def update_from_csv(self,csv_file):
|
|
with open(csv_file) as file:
|
|
reader = csv.DictReader(file)
|
|
l = list(reader)
|
|
for line in l:
|
|
date = line.pop('Posting Date')
|
|
cOs = line.pop('Check or Slip #')
|
|
line['date'] = date_parse(date)
|
|
line['Description'] = noise.sub('',line['Description'])
|
|
line['Amount'] = float(line['Amount'])
|
|
line['cOs'] = cOs
|
|
self.cur.executemany('INSERT OR IGNORE INTO `transactions` VALUES (:Description,:date,:Amount,:Type,:cOs);',l)
|
|
self.con.commit()
|
|
if __name__ == "__main__":
|
|
b = browser("test.db")
|
|
b.update_from_csv('test.csv')
|
|
res = b.cur.execute('SELECT * FROM transactions WHERE amount>=100;')
|