2016-03-01 55 views
0

我想在函数内创建一个类的新实例。第一次创建实例时,虽然当我尝试创建一个额外的实例(通过重新访问路由)时,我收回了对原始对象的引用。如何强制SQLAlchemy类的新实例

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

@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>

我试过(都在我的Flask路线)删掉使用db_session.expunge(test_obj)del(test_obj)对象,但我仍然得到原始对象的引用。

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

回答

1

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

在您的路线:

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

在你t定义:

t = { 
    'footests': {'obj': FooTest, 
        'name': 'Foo Test', 
        ... 
        }, 
    ... 
} 
相关问题