关于aiomysql配合sqlalchemy导入表结构的问题

import asyncio
import sqlalchemy as sa

from aiomysql.sa import create_engine


@asyncio.coroutine
def go():
    engine = yield from create_engine(user='root',db='test',host='127.0.0.1',password='root')

    metadata = sa.MetaData(bind=engine)
    tbl = sa.Table('tbl', metadata
        ,sa.Column('id', sa.Integer, primary_key=True)
        ,sa.Column('val', sa.String(255))
    )
    with (yield from engine) as conn:
        res = yield from conn.execute(tbl.select())
        for row in res:
            print(row.id, row.val)

asyncio.get_event_loop().run_until_complete(go())


上述是aiomysql所给出的官方示例,我想问的是,对于每一张表在上述的案例中都要使用sa.Table()方法进行数据表的映射,并且在这个映射中必须要列出所有的数据列。
在单独使用sqlalchemy(不使用aiomysql)的时候可以通过如下方法导入

alphaTable = Table('alpha', metadata, autoload=True)

但是配合上aiomysql之后会出现报错,想问有没有什么办法是可以不用自己枚举信息列直接通过某些方法导入?

阅读 4.9k
1 个回答

额外创建一个普通的 SQLAlchemy engine,然后用 autoload_with=blocking_engine 替代 autoload=True。因为表映射应该只发生一次,所以此时不使用异步应该可以接受。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题