我有一个清理数据库的脚本,在我们的测试中广泛使用。
首先,我们尝试使用SQLAlchemy Metadata.drop_all()方法,但它在删除时没有解决一些外键问题,导致错误。然后,我发现了@zzzeek的这个脚本,它几乎做了同样的事情,但是以“智能”的方式处理所有外键问题。但现在存在几个关于更改的自定义类型(ENUM)的问题。问题是,如何使用SQLAlchemy将它们全部删除?只能手动执行DROP TYPE吗?
数据库中的表是用Alembic创建的,即使上面的脚本成功删除了所有表,一些自定义ENUM仍然存在,并且在尝试重新创建它们时会失败。
重新创建整个数据库不是首选解决方案,因为应用程序的默认DB用户通常不应该拥有创建数据库的权限。
首先,我们尝试使用SQLAlchemy Metadata.drop_all()方法,但它在删除时没有解决一些外键问题,导致错误。然后,我发现了@zzzeek的这个脚本,它几乎做了同样的事情,但是以“智能”的方式处理所有外键问题。但现在存在几个关于更改的自定义类型(ENUM)的问题。问题是,如何使用SQLAlchemy将它们全部删除?只能手动执行DROP TYPE吗?
数据库中的表是用Alembic创建的,即使上面的脚本成功删除了所有表,一些自定义ENUM仍然存在,并且在尝试重新创建它们时会失败。
重新创建整个数据库不是首选解决方案,因为应用程序的默认DB用户通常不应该拥有创建数据库的权限。