diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/risk/swaptions.py | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/python/risk/swaptions.py b/python/risk/swaptions.py index 99e4ebc6..df27a3c5 100644 --- a/python/risk/swaptions.py +++ b/python/risk/swaptions.py @@ -2,6 +2,7 @@ import logging from analytics import Portfolio, BlackSwaption from db import DataError +from psycopg2 import sql logger = logging.getLogger(__name__) @@ -22,8 +23,20 @@ def get_swaption_portfolio(date, conn, **kwargs): return portf -def insert_swaption_portfolio(portf, conn): - sql_str = "INSERT INTO swaption_marks VALUES(%s, %s, %s, %s, %s, %s, %s)" +def insert_swaption_portfolio(portf, conn, overwrite=True): + columns = ["market_value", "delta", "gamma", "vega", "theta"] + place_holders = sql.SQL(", ").join([sql.Placeholder()] * 7) + if overwrite: + update_str = (sql.SQL("DO UPDATE SET {}"). + format(sql.SQL(", "). + join(sql.SQL("{} = excluded.{}"). + format(sql.Identifier(col), sql.Identifier(col)) + for col in columns))) + else: + update_str = sql.SQL("DO NOTHING") + sql_str = (sql.SQL("INSERT INTO swaption_marks VALUES({}) " + "ON CONFLICT (dealid, date) {} "). + format(place_holders, update_str)) with conn.cursor() as c: for id, trade in portf.items(): to_insert = (id, trade.value_date, trade.pv, trade.delta, |
