Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 测试中模型导入和alembic架构升级之间的SQLAlchemy元数据冲突_Python_Sqlalchemy_Alembic - Fatal编程技术网

Python 测试中模型导入和alembic架构升级之间的SQLAlchemy元数据冲突

Python 测试中模型导入和alembic架构升级之间的SQLAlchemy元数据冲突,python,sqlalchemy,alembic,Python,Sqlalchemy,Alembic,我有一个带有PostgreSQL数据库、Alembic迁移和SQLAlchemy的Flask应用程序 最近,我开始编写针对数据库的集成测试。我导入一个映射到表“Item”的模型(比如Item),执行“从模型导入Item”会触发表的SQLAlchemy元数据的构造 在我的测试设置中,我有 def setUpClass(cls): try: os.remove('testdb.db:') except: pass

我有一个带有PostgreSQL数据库、Alembic迁移和SQLAlchemy的Flask应用程序

最近,我开始编写针对数据库的集成测试。我导入一个映射到表“Item”的模型(比如Item),执行“从模型导入Item”会触发表的SQLAlchemy元数据的构造

在我的测试设置中,我有

    def setUpClass(cls):
        try:
            os.remove('testdb.db:')
        except:
            pass

        #Run db migrations
        global db_manager

        db_manager = DatabaseManager()
        alembic_cfg = Config("./alembic.ini")
        alembic_cfg.attributes['db_manager'] = db_manager
        command.upgrade(alembic_cfg, "head")
这导致

sqlalchemy.exc.InvalidRequestError:已为此元数据实例定义了表“项”。指定“extend_existing=True”以重新定义现有表对象上的选项和列

我已对此进行调试,使元数据对象在两次调用之间相同,从而将“item”表两次累积到其tables数组中

我有另一个几乎完全相同的应用程序,这个设置可以工作,所以我知道它在理论上应该可以工作。在另一个应用程序中,导入和升级阶段的元数据对象不同,因此alembic运行升级时表数组为空,因此没有错误

对不起,我不能提供实际的代码,工作项目。如果我有时间的话,也许可以构造一个最小的玩具示例

如果我了解了在SQLAlchemy中元数据的实际创建位置,我也许能够找到alembic在工作应用程序中而不是在问题应用程序中获得干净元数据实例的原因

在工作应用程序中,未设置“extend_existing”,我不希望调用一些hack来掩盖潜在问题