Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy drop\u所有不丢弃表_Python_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy drop\u所有不丢弃表

Python SQLAlchemy drop\u所有不丢弃表,python,sqlalchemy,Python,Sqlalchemy,我正在尝试使用SQLAlchemy自动化应用程序的数据库创建/删除。我已经创建了模型,通过ORM进行的查询工作没有问题。但是,当我想从头开始擦除和重新创建数据库时,Base.metadata.drop_allengine会运行,但在我尝试通过Python控制台进行故障排除时不会返回任何内容。它实际上也不会删除我的数据存储中的任何对象。我还验证了用户帐户是否具有删除权限 当我运行Base.metadata.sorted_表时,我会得到一个与模型匹配的表列表。我还尝试在已排序的_表上运行for循环,

我正在尝试使用SQLAlchemy自动化应用程序的数据库创建/删除。我已经创建了模型,通过ORM进行的查询工作没有问题。但是,当我想从头开始擦除和重新创建数据库时,Base.metadata.drop_allengine会运行,但在我尝试通过Python控制台进行故障排除时不会返回任何内容。它实际上也不会删除我的数据存储中的任何对象。我还验证了用户帐户是否具有删除权限

当我运行Base.metadata.sorted_表时,我会得到一个与模型匹配的表列表。我还尝试在已排序的_表上运行for循环,并对每个表执行drop,但得到一个错误,指出该表不存在

我的完整代码回购可在以下网址找到: 模型位于models/目录中,而引擎创建代码位于data_store.py中

我已经复制了我认为相关的部分,但是在读了很多个小时的文档并试图解决这个问题之后,所有这些都变得模糊了

# 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"))