我有一个清理数据库的脚本,这在我们的测试中被广泛使用。
首先,我们尝试使用SQLAlchemy Metadata.drop_all()的东西,但它没有在删除时解析一些外键,这会导致错误。然后,我从@zzzeek找到this script,它几乎一样,但是以“智能”方式。它处理外键的所有问题,但现在有几个关于更改自定义类型(ENUM)的问题。问题是,如何使用SQLAlchemy将它们全部删除?手动执行DROP TYPE?
数据库中的表是使用Alembic创建的,即使上面的脚本成功删除了所有表,一些自定义的ENUM仍然存在,并且在尝试重新创建它们时一切都失败。
重新创建整个数据库不是首选解决方案,因为应用程序的默认数据库用户通常无权创建数据库。
答案 0 :(得分:1)
您确定您的元数据实例完全描述了所有表吗?
尝试:
Metadata.reflect()
Metadata.drop_all()