首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aiopg + sqlalchemy:如何在没有原始sql的情况下“删除表”?

aiopg + sqlalchemy:如何在没有原始sql的情况下“删除表”?
EN

Stack Overflow用户
提问于 2019-11-20 09:51:13
回答 1查看 2.2K关注 0票数 13

我看着使用sqlalchemy的aiopg使用示例,这些台词吓到我了:

代码语言:javascript
复制
async def create_table(conn):
    await conn.execute('DROP TABLE IF EXISTS tbl')
    await conn.execute(CreateTable(tbl))

我不想在使用sqlalchemy时执行原始sql查询。但是,我找不到任何其他方法来实现相同的逻辑。我的尝试是:

1)

代码语言:javascript
复制
await conn.execute(tbl.drop(checkfirst=True))

这就提出了:

sqlalchemy.exc.UnboundExecutionError:表对象'tbl‘不绑定到引擎或连接。如果没有要对其执行的数据库,则无法继续执行。

另外,我无法找到将表绑定到引擎的方法,因为

2)

代码语言:javascript
复制
await conn.execute(DropTable(tbl))

这就提出了:

psycopg2.errors.UndefinedTable:表"tbl“不存在

DropTable构造似乎不以任何方式支持IF EXISTS部件。

因此,问题是,在使用aiopg + sqlalchemy时,有没有办法将await conn.execute('DROP TABLE IF EXISTS tbl')语句重写为没有原始sql的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-16 14:02:09

这个问题是在最新版本为SQLAlchemy 1.3.11时发布的。

从SQLAlchemy 1.4.0开始,DropTable支持if_exists=True

代码语言:javascript
复制
await conn.execute(DropTable(tbl, if_exists=True))

参考资料:https://docs.sqlalchemy.org/en/14/core/ddl.html#sqlalchemy.schema.DropTable

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58951334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档