[+] improve tickers storage in DB

This commit is contained in:
Siarhei Siniak 2025-07-10 11:18:15 +03:00
parent 027475e4b3
commit 070a63222c
3 changed files with 32 additions and 4 deletions

@ -5,7 +5,7 @@ import logging
from ..tickers_retrieval.emcont import Emcont
from ..tickers.models import Ticker
from ..tickers.settings import Settings as ModelsSettings
from ..tickers.logic import ticker_store_multiple
from ..tickers.logic import ticker_store_multiple, markets_get_by_symbol
import sqlalchemy.ext.asyncio
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.ext.asyncio import async_sessionmaker
@ -27,11 +27,19 @@ async def run() -> None:
timestamp: datetime.datetime,
session: 'async_sessionmaker[AsyncSession]',
) -> None:
markets = await markets_get_by_symbol(
session,
set([
rate.symbol
for rate in rates
]),
)
await ticker_store_multiple(
session,
[
Ticker(
id=-1,
id=markets[rate.symbol].id,
timestamp=timestamp,
value=rate.value,
)

@ -1,7 +1,26 @@
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.ext.asyncio import async_sessionmaker
from .models import Ticker
from .models import Ticker, Market
from .utils import get_or_create
async def markets_get_by_symbol(
session: 'async_sessionmaker[AsyncSession]',
symbols: set[str],
) -> dict[str, Market]:
res : dict[str, Market] = dict()
async with session() as active_session:
async with active_session.begin() as transaction:
for o in symbols:
m = (await get_or_create(
active_session,
Market,
name=o,
))[0]
res[o] = m
return res
async def ticker_store_multiple(
session: 'async_sessionmaker[AsyncSession]',

@ -23,7 +23,8 @@ async def get_or_create(
)
)
row = res.one()
row = res.one()[0]
assert isinstance(row, model)
return row