aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/risk/swaptions.py17
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,