我看着使用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‘不绑定到引擎或连接。如果没有要对其执行的数据库,则无法继续执行。
另外,我无法找到将表绑定到引擎的方法,因为全
2)
await conn.execute(DropTable(tbl))这就提出了:
psycopg2.errors.UndefinedTable:表"tbl“不存在
DropTable构造似乎不以任何方式支持IF EXISTS部件。
因此,问题是,在使用aiopg + sqlalchemy时,有没有办法将await conn.execute('DROP TABLE IF EXISTS tbl')语句重写为没有原始sql的东西?
发布于 2021-10-16 14:02:09
这个问题是在最新版本为SQLAlchemy 1.3.11时发布的。
从SQLAlchemy 1.4.0开始,DropTable支持if_exists=True。
await conn.execute(DropTable(tbl, if_exists=True))参考资料:https://docs.sqlalchemy.org/en/14/core/ddl.html#sqlalchemy.schema.DropTable
https://stackoverflow.com/questions/58951334
复制相似问题