def save_insider_trades(tmp_file: IO): """Прочитать данные о торгах инсайдеров из файла и сохранить их в базу. :param tmp_file: временный файл, откуда откуда будут прочитаны данные и сохранены в файл """ for chunk in chunked(tmp_file.readlines(), Config.CHUNK_SIZE): insider_trades = [json.loads(line) for line in chunk] insiders: Set[InsiderTuple] = set( InsiderTuple( id=insider_trade['insider_id'], name=insider_trade['insider_name'], ) for insider_trade in insider_trades) Insider.insert_insiders(insiders) symbols: Set[str] = set(insider_trade['symbol'] for insider_trade in insider_trades) Ticker.insert_tickers(symbols) symbol_to_uuid: Dict[str, UUID] = Ticker.get_uuids_by_symbol() InsiderTrade.bulk_insert([ dict(ticker_id=symbol_to_uuid[insider_trade['symbol']], **{ k: v for k, v in insider_trade.items() if k != 'symbol' and k != 'insider_name' }) for insider_trade in insider_trades ]) session.commit()
def save_historical_prices(tmp_file: IO) -> None: """Прочитать исторические данные из файла и сохранить их в базу. :param tmp_file: временный файл, откуда откуда будут прочитаны данные и сохранены в файл """ for chunk in chunked(tmp_file.readlines(), Config.CHUNK_SIZE): historical_prices = [json.loads(line) for line in chunk] symbols: Set[str] = set(historical_price['symbol'] for historical_price in historical_prices) Ticker.insert_tickers(symbols) symbol_to_uuid: Dict[str, UUID] = Ticker.get_uuids_by_symbol() HistoricalPrice.bulk_insert([ dict( ticker_id=symbol_to_uuid[historical_price['symbol']], **{k: v for k, v in historical_price.items() if k != 'symbol'}) for historical_price in historical_prices ]) session.commit()