Commit 9e3342ed authored by Dr.李's avatar Dr.李

added update and instert positions api

parent faa4de60
...@@ -36,6 +36,7 @@ from alphamind.data.dbmodel.models import Universe as UniverseTable ...@@ -36,6 +36,7 @@ from alphamind.data.dbmodel.models import Universe as UniverseTable
from alphamind.data.dbmodel.models import Formulas from alphamind.data.dbmodel.models import Formulas
from alphamind.data.dbmodel.models import DailyPortfoliosSchedule from alphamind.data.dbmodel.models import DailyPortfoliosSchedule
from alphamind.data.dbmodel.models import Performance from alphamind.data.dbmodel.models import Performance
from alphamind.data.dbmodel.models import Positions
from alphamind.data.transformer import Transformer from alphamind.data.transformer import Transformer
from alphamind.model.loader import load_model from alphamind.model.loader import load_model
from alphamind.formula.utilities import encode_formula from alphamind.formula.utilities import encode_formula
...@@ -779,6 +780,29 @@ class SqlEngine(object): ...@@ -779,6 +780,29 @@ class SqlEngine(object):
self.engine.execute(query) self.engine.execute(query)
df.to_sql(Performance.__table__.name, self.engine, if_exists='append', index=False) df.to_sql(Performance.__table__.name, self.engine, if_exists='append', index=False)
def upsert_positions(self, ref_date, df):
universes = df.universe.unique()
benchmarks = df.benchmark.unique()
build_types = df.type.unique()
sources = df.source.unique()
portfolios = df.portfolio.unique()
query = delete(Positions).where(
Positions.trade_date == ref_date,
Positions.type.in_(build_types),
Positions.universe.in_(universes),
Positions.benchmark.in_(benchmarks),
Positions.source.in_(sources),
Positions.portfolio.in_(portfolios)
)
self.engine.execute(query)
df.to_sql(Positions.__table__.name,
self.engine,
if_exists='append',
index=False,
dtype={'weight': sa.types.JSON})
if __name__ == '__main__': if __name__ == '__main__':
engine = SqlEngine() engine = SqlEngine()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment