Форум сайта python.su
Необходимо использовать “server-side cursor” в SQLAlchemy для одного запроса. Как делать при создании engine - знаю. А как для одного запроса - нет. Пока сделал так:
import sqlalchemy as sa
def get_data(engine):
# вот для этого запроса нужен курсор
s = sa.select(…)
return engine.connect().execute(s)
def fill_related_data(engine, data):
connection = engine.connect()
for row in data:
s = sa.select(…)
related = connection.execute(s).fetchone()
yield (row, related)
def main(engine_uri)
engine_with_cursors = sa.create_engine(
engine_uri,
echo=False,
server_side_cursors=True,
)
engine_without_cursors = sa.create_engine(
engine_uri,
echo=False,
server_side_cursors=False,
)
return fill_related_data(engine_without_cursors, get_data(engine_with_cursors)))
P.S. СУБД - PostgreSQL, SQLAlchemy - 0.4.3
Офлайн
Кажется, никак. Курсоры создаются через connection pool, а они - одна на engine
Офлайн
Андрей СветловТоесть как в DB API - одно соединение, одна транзакция?
они - одна на engine
Офлайн
Андрей СветловНе здорово. Чаще всего server-side курсоры нужны для одного-двух запросов, а тащить за собой два engine: один с курсорами, другой без – не кошерно.
Кажется, никак. Курсоры создаются через connection pool, а они - одна на engine
Офлайн