Python SQLAlchemy drop\u所有不丢弃表
我正在尝试使用SQLAlchemy自动化应用程序的数据库创建/删除。我已经创建了模型,通过ORM进行的查询工作没有问题。但是,当我想从头开始擦除和重新创建数据库时,Base.metadata.drop_allengine会运行,但在我尝试通过Python控制台进行故障排除时不会返回任何内容。它实际上也不会删除我的数据存储中的任何对象。我还验证了用户帐户是否具有删除权限 当我运行Base.metadata.sorted_表时,我会得到一个与模型匹配的表列表。我还尝试在已排序的_表上运行for循环,并对每个表执行drop,但得到一个错误,指出该表不存在 我的完整代码回购可在以下网址找到: 模型位于models/目录中,而引擎创建代码位于data_store.py中 我已经复制了我认为相关的部分,但是在读了很多个小时的文档并试图解决这个问题之后,所有这些都变得模糊了Python SQLAlchemy drop\u所有不丢弃表,python,sqlalchemy,Python,Sqlalchemy,我正在尝试使用SQLAlchemy自动化应用程序的数据库创建/删除。我已经创建了模型,通过ORM进行的查询工作没有问题。但是,当我想从头开始擦除和重新创建数据库时,Base.metadata.drop_allengine会运行,但在我尝试通过Python控制台进行故障排除时不会返回任何内容。它实际上也不会删除我的数据存储中的任何对象。我还验证了用户帐户是否具有删除权限 当我运行Base.metadata.sorted_表时,我会得到一个与模型匹配的表列表。我还尝试在已排序的_表上运行for循环,
# The engine creation code
engine = create_engine(data_store_type + '://' + data_store_username + ':' + data_store_password
+ '@' + data_store_host + '/' + data_store_name)
session = sessionmaker(bind=engine)
session = session(expire_on_commit=False)
session.execute("SET search_path TO %s" % data_store_name)
问题是,因为我使用的是postgresql,所以默认情况下使用公共模式,因为我没有在表模型中定义模式。完成后,模式也被添加到任何ForeignKey列drop_all和create_all中,并按文档所述工作 作为一个例子,以下是最终有效的方法:
class MyTable(Base):
__tablename__ = "my_table"
__table_args__ = {"schema": "my_schema"}
my_table_fk = Column(Integer, ForeignKey("my_schema.my_other_table.my_other_table_id"))
Base.metadata.drop_allengine运行但不返回任何内容-我认为该方法不应该返回任何内容。您是否确实检查了数据库以查看这些表是否不再存在?是的,实际上没有删除任何内容。我还验证了连接到数据库的用户能够通过jdbc/SQL客户机删除对象。
class MyTable(Base):
__tablename__ = "my_table"
__table_args__ = {"schema": "my_schema"}
my_table_fk = Column(Integer, ForeignKey("my_schema.my_other_table.my_other_table_id"))