如何强制新的 SQLAlchemy 实例 class

How to force new instance of SQLAlchemy class

我正在尝试在函数中创建 class 的新实例。该实例是第一次创建新的,尽管当我尝试创建一个额外的实例(通过重新访问路由)时,我得到了对原始对象的引用。

这是我构建应用程序的方式。请参阅下面的简化代码:

@tests.route('/generate_test/<t_type>', methods=['GET'])
def generate_test(t_type):
    test_obj = t[t_type]['obj']
    ...
    return test_obj

其中 t 是如下所示的字典:

t = {
     'footests':  {'obj': FooTest(),
                   'name': 'Foo Test',
                   ...
                  },
     ...
}

由于有许多不同类型的测试,我希望我可以使用此方法提供与某种测试相关的所有额外详细信息。当我第一次生成新测试时,测试对象 FooTest 是新的,意思是 id = None 等等

虽然,一旦我第二次尝试生成新测试,字典 t 中的实例仍然与第一次的测试实例相关联,这意味着 id = <id_from_last_time>

我尝试使用 db_session.expunge(test_obj)del(test_obj)(都在我的 Flask 路径中)删除对象,尽管我仍然得到对原始对象的引用。

我希望字典 t 在我每次调用它时提供一个 新对象实例

如果我对你的问题理解正确,你只需要在每次调用路由时创建实例,而不是简单地读取先前创建的实例的值。

在你的路线中:

test_obj = t[t_type]['obj']()

在您的 t 定义中:

t = {
     'footests':  {'obj': FooTest,
                   'name': 'Foo Test',
                   ...
                  },
     ...
}