diff options
Diffstat (limited to 'python/calibrate_tranches_BC.py')
| -rw-r--r-- | python/calibrate_tranches_BC.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/python/calibrate_tranches_BC.py b/python/calibrate_tranches_BC.py index cd32760b..d75c2e3d 100644 --- a/python/calibrate_tranches_BC.py +++ b/python/calibrate_tranches_BC.py @@ -1,4 +1,4 @@ -from db import dbconn, dbengine +from db import dbconn from analytics import TrancheBasket from pandas.tseries.offsets import BDay import datetime @@ -19,6 +19,16 @@ def get_lastdate(conn, index, series, tenor): conn.commit() return date +def build_sql_str(df): + cols = ','.join(df.columns) + cols_ex_tranche_id = ','.join([c for c in df.columns if c != 'tranche_id']) + cols_excluded = ','.join([f"excluded.{c}" for c in df.columns if c != 'tranche_id']) + place_holders = ",".join([f"%({c})s" for c in df.columns]) + sql_str = (f"INSERT INTO tranche_risk({cols}) " + f"VALUES({place_holders}) ON CONFLICT (tranche_id) DO " + f"UPDATE SET ({cols_ex_tranche_id}) = ({cols_excluded})") + return sql_str + if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') @@ -68,8 +78,7 @@ if __name__ == "__main__": 'eu30': datetime.date(2018, 9, 25), 'xo30': datetime.date(2018, 9, 25)} - serenitas_engine = dbengine('serenitasdb') - serenitas_conn = serenitas_engine.raw_connection() + serenitas_conn = dbconn('serenitasdb') if args.config is None: if args.index is None: raise ValueError("Please provide an index to run") @@ -132,5 +141,8 @@ if __name__ == "__main__": del df['fwd_gamma'] data[d] = df if data: - (pd.concat(data). - to_sql("tranche_risk", serenitas_engine, if_exists='append', index=False)) + data = pd.concat(data) + sql_str = build_sql_str(data) + with serenitas_conn.cursor() as c: + c.executemany(sql_str, data.to_dict(orient='record')) + serenitas_conn.commit() |
