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,)) id = cursor.fetchone()[0] else: id = cursor.fetchone()[0] def clean(field): if field == "NA": return None else: return field for row in handler: for (key, value) in row.items(): row[key] = clean(value) cursor.execute("INSERT INTO history(date, stockID, open, high, low," "close, volume, adjClose, div, adjDiv, split) " "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (row['Date'], id, row['Open'], row['High'], row['Low'], row['Unadj.Close'], row['Volume'], row['Close'], row['Div'], row['Adj.Div'], row['Split'] ) ) conn.commit() if __name__ == '__main__': if len(argv) != 5: print argv[0], " " exit(1) 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] #get the ticker from the filename csvHandler = csv.DictReader(handler) addTickerHistory(ticker, csvHandler, cursor, conn) cursor.close() conn.close() handler.close()