summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--database.py58
-rw-r--r--database.sql19
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)
+);