dburl = 'postgresql+psycopg2:///' + db_name engine = create_engine(dburl) # Create schema and tables try: engine.execute(CreateSchema(schema)) except ProgrammingError: pass Account.__table__.schema = schema Position.__table__.schema = schema Account.__table__.create(engine, checkfirst=True) Position.__table__.create(engine, checkfirst=True) Session = sessionmaker(bind=engine) session = Session() # Create the account entry account_info = {'institution': 'Test', 'account': 'Test'} pos_data = {} pos_data['id'] = get_id(account_info, session) # Get the timestamp f = open(pos_fname, 'r') pos_data['timestamp'] = f.readline().strip().split()[-1] c = csv.DictReader(f) for row in c: pos_data.update(gen_position_data(row, fieldmap)) session.add(Position(**pos_data)) try: session.commit() except IntegrityError as err: if 'duplicate key' in str(err): session.rollback() else: raise(err)
if tid in trades_dict: row = dict(sofl.attrib.items() + trades_dict[tid].items()) try: row['commission'] = row.pop('ibCommission') except KeyError: pass try: row['commissionCurrency'] = row.pop('ibCommissionCurrency') except KeyError: pass row.pop('date') row['timestamp'] = ' '.join(add_timezone(row.pop('tradeDate'), row.pop('tradeTime'), fmt='%Y%m%d %H%M%S')) else: row = dict(sofl.attrib) row['tradeID'] = -1 row['timestamp'] = ' '.join(add_timezone(row.pop('date'), '160000', fmt='%Y-%m-%d %H%M%S')) row['id'] = get_id({'account': row.pop('accountId'), 'institution': 'IB'}, session) row = dict([(k,row[k]) for k in row if row[k] not in NULL_SYMBOLS]) t = Transaction(**row) tpk = dict([(k, row[k]) for k in t.__table__.primary_key.columns.keys()]) session.add(t) try: session.commit() print >> sys.stderr, "Inserted", tpk except IntegrityError as err: session.rollback() if 'duplicate key value' in err.args[0]: print >> sys.stderr, err.args[0].split('\n')[1] else: raise err session.close()