如何强制SQLAlchemy类的新实例

时间:2016-03-01 18:11:52

标签: python class sqlalchemy instantiation

我正在尝试在函数中创建一个类的新实例。第一次创建实例时,虽然当我尝试创建一个额外的实例(通过重新访问路径)时,我将返回对原始对象的引用。

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

@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每次调用它时都会提供新对象实例

1 个答案:

答案 0 :(得分:1)

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

在你的路线中:

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

t定义中:

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