我正在看sqlalchemy的aiopg用法示例,这些行使我感到恐惧:
async def create_table(conn): await conn.execute('DROP TABLE IF EXISTS tbl') await conn.execute(CreateTable(tbl))
使用sqlalchemy时,我不想执行原始sql查询。但是我找不到其他方法来实现相同的逻辑。我的尝试是:
1)
await conn.execute(tbl.drop(checkfirst=True))
这引起了:
sqlalchemy.exc.UnboundExecutionError:表对象“ tbl”未绑定到引擎或连接。没有要执行的数据库,执行将无法进行。
我也找不到将表绑定到引擎的方法,因为aiopg不支持元数据。
2)
await conn.execute(DropTable(tbl))
这引起了:
psycopg2.errors.UndefinedTable:表“ tbl”不存在
似乎DropTable
构造不IF EXISTS
以任何方式支持部分。
因此,问题是,await conn.execute('DROP TABLE IF EXISTS tbl')
使用aiopg + sqlalchemy时,有没有办法将语句重写为没有原始sql的内容?