Commit 47fe2c2f authored by Dr.李's avatar Dr.李

more efficient fetch

parent e90c7f82
...@@ -249,25 +249,24 @@ class SqlEngine(object): ...@@ -249,25 +249,24 @@ class SqlEngine(object):
stats = self._create_stats(Market, horizon, offset) stats = self._create_stats(Market, horizon, offset)
cond = universe._query_statements(start_date, end_date, None) codes = universe.query(self.engine, start_date, end_date, dates)
t = select([Market.trade_date, Market.code, stats]).where( t = select([Market.trade_date, Market.code, stats]).where(
Market.trade_date.between(start_date, end_date) and_(
).alias('t') Market.trade_date.between(start_date, end_date),
big_table = join(t, UniverseTable, Market.code.in_(codes.code.unique().tolist())
and_( )
t.columns['trade_date'] == UniverseTable.trade_date, ).cte('t')
t.columns['code'] == UniverseTable.code,
cond
)
)
query = select([t]).select_from(big_table) cond = universe._query_statements(start_date, end_date, dates)
df = pd.read_sql(query, self.session.bind).dropna() query = select([t]).where(
and_(t.columns['trade_date'] == UniverseTable.trade_date,
t.columns['code'] == UniverseTable.code,
cond)
)
if dates: df = pd.read_sql(query, self.session.bind).dropna()
df = df[df.trade_date.isin(dates)] return df.sort_values(['trade_date', 'code'])
return df.sort_values(['trade_date', 'code']).drop_duplicates(['trade_date', 'code'])
def fetch_dx_return_index(self, def fetch_dx_return_index(self,
ref_date: str, ref_date: str,
......
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