diff options
| -rw-r--r-- | database.py | 58 | ||||
| -rw-r--r-- | database.sql | 19 |
2 files changed, 77 insertions, 0 deletions
diff --git a/database.py b/database.py new file mode 100644 index 0000000..c00ccd8 --- /dev/null +++ b/database.py @@ -0,0 +1,58 @@ +import urllib +import csv +import psycopg2 +from sys import argv +from os.path import basename, splitext + +def yahooCsv(name): + params = urllib.urlencode({ "s" : name, + "a" : 0, + "b" : 1, + "c" : 1990, + "d" : 11, + "e" : 30, + "f" : 2010, + "g" : "d", + "ignore" : ".csv" }) + handler = urllib.urlopen("http://ichart.finance.yahoo.com/table.csv?{}" + .format(params)) + return csv.DictReader(handler) + +def addTickerHistory(name, handler, cursor, conn): + cursor.execute("SELECT stockid FROM stock WHERE ticker=%s",(name,)) + if cursor.rowcount == 0: + cursor.execute("INSERT INTO stock(ticker) VALUES (%s) RETURNING stockid",(name,)) + conn.commit() + id = cursor.fetchone()[0] + else: + id = cursor.fetchone()[0] + + def clean(field): + if field == "NA": + return None + + for row in handler: + cursor.execute("INSERT INTO history(date, stockID, open) VALUES (%s, %s, %s)", + (row['Date'], id, row['Open'])) + + conn.commit() + +if __name__ == '__main__': + database = argv[1] + user = argv[2] + password = argv[3] + conn = psycopg2.connect(database=database, user=user, password=password) + cursor = conn.cursor() + + filename = argv[4] + handler = open(filename,"r") + ticker = splitext(basename(filename))[0] + csvHandler = csv.DictReader(handler) + + addTickerHistory(ticker, csvHandler, cursor, conn) + + cursor.close() + conn.close() + handler.close() + + diff --git a/database.sql b/database.sql new file mode 100644 index 0000000..d5cb31d --- /dev/null +++ b/database.sql @@ -0,0 +1,19 @@ +CREATE TABLE stock ( + stockId serial PRIMARY KEY, + ticker varchar(10) +); + +CREATE TABLE history ( + date date DEFAULT CURRENT_DATE NOT NULL, + stockId integer NOT NULL REFERENCES stock ON DELETE CASCADE ON UPDATE CASCADE, + open double precision DEFAULT NULL, + high double precision DEFAULT NULL, + low double precision DEFAULT NULL, + close double precision DEFAULT NULL, + adjClose double precision DEFAULT NULL, + volume integer DEFAULT NULL, + div real DEFAULT NULL, + adjDiv real DEFAULT NULL, + split real DEFAULT NULL, + PRIMARY KEY (date, stockid) +); |
