@toddbarry

Стоит ли подключать orm к aiohttp через внутреннюю поддержку?

aiohttp, судя по документации, поддерживает Gino - это orm, использующая драйвер asyncpg, основанная на sqlalchemy.

Сейчас эта orm-ка подключена простым импортом к моему бекенду:
from aiohttp import web
from gino import Gino

app = web.Application()
db = Gino()

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    fullname = db.Column(db.String)

async def main():
    async with db.with_bind('postgresql://localhost/mydb') as engine:
        await db.gino.create_all()
        await User.create(name='jack', fullname='Jack Jones')
        print(await User.query.gino.all())

asyncio.get_event_loop().run_until_complete(main())

# дальше идут вьюхи, роуты и т п - пока всё в одном файле, т.к. мне так удобнее осваивать.
# Позднее всё будет отсортировано по различным модулям

if __name__ == '__main__':
    web.run_app(app)

Всё работает

Тут, на сколько я могу судить, запускается два event loop - один для самого aiohttp под капотом программы, а другой для Gino.

Однако в документации описана поддержка Gino из коробки:
from aiohttp import web
from gino.ext.aiohttp import Gino

db = Gino()
app = web.Application(middlewares=[db])
db.init_app(app)


Тогда будут работать middlewares (кстати пока не понял что даёт конкретно эта middlewares db)

Вопрос состоит из двух частей:
1) я пока не понял, правильно ли иметь как в первом коде два различных event loop'а? Они как-то распараллеливаются друг с другом? И если да, то как? Не будет ли один event loop блокировать второй по какой-то причине?

2) Если всё работает хорошо и так, что полезного может дать подключение Gino вторым вариантом?
  • Вопрос задан
  • 2042 просмотра
Пригласить эксперта
Ответы на вопрос 1
а чем родной aiopg не угодил ?
там же и поддержка алхимии есть
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы