回答问题

我需要删除具有外键约束并需要DROP TABLE ... CASCADE的 PostgreSQL 数据库中的表。

我可以执行原始 SQL:engine.execute("DROP TABLE %s CASCADE;" % table.name)。但是,我想实现这种行为,以便我可以为postgresql方言做table.drop(engine)

一个人将如何解决这个问题?

Answers

您可以像这样自定义结构的编译:

from sqlalchemy.schema import DropTable
from sqlalchemy.ext.compiler import compiles

@compiles(DropTable, "postgresql")
def _compile_drop_table(element, compiler, **kwargs):
    return compiler.visit_drop_table(element) + " CASCADE"

这会将CASCADE附加到为 postgresql 方言发出的DROP TABLE语句,同时保持所有其他方言相同。

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐