【发布时间】:2021-03-11 06:22:05
【问题描述】:
有人知道如何在不知道其结构的情况下使用 SqlAlchemy 以 ORM 样式清除所有数据库内容吗?
用户提供连接详细信息(登录名、psw、数据库名称)的问题,我们必须准备安装我们的数据库结构。所以,我想清除给定数据库中的所有旧数据。
可以在不使用关系中的必要语句 (cascade="all, delete") 的情况下创建以前版本的列。它的结构也可能不为我们所知。有什么安全的方法可以删除整个数据库内容吗?我可以在原始 SQL 中执行此操作,使用 DROP TABLE ... CASCADE,但我需要 ORM 方式。
例如,由于查询中缺少 CASCADE 指令,这些行会抛出 sqlalchemy.exc.IntegrityError:
for tbl in reversed(Base.metadata.sorted_tables):
db.execute(tbl.delete())
并且由于查询中缺少 CASCADE 指令,此行也会引发 sqlalchemy.exc.InternalError。
Base.metadata.drop_all(bind=db)
这里有很多关于如何做到这一点的信息,但每个解决方案都取决于我们不知道的列关系。 提前致谢!
【问题讨论】:
标签: python postgresql orm sqlalchemy