在使用flask时从factory boy中的已填充表中进行选择



在factory boy中,可以创建与另一个表有关系的sqlalchemy对象。有一个通用的从已填充的表中选择的方法,它是为django做的,我现在想为flask做这个。

所以我认为我应该使用这一行。

user = factory.Iterator(User.query.all())

当然它不起作用。我得到一个错误,没有应用程序上下文。它在文档中声明,在第一次调用Userfactory之前不会对查询进行评估,但是在导入时发生错误。

我想有一个工厂,从我已经创建的对象中选择外键。在烧瓶里怎么做呢?

这个例子适用于Django,因为QuerySet是惰性的;即请求只有在尝试迭代时才会命中数据库。FactoryBoy的迭代器只有在第一次调用工厂时才会开始在提供的生成器上迭代。

对于SQLAlchemy,您需要一种方法来返回生成器而不是列表;我想这对factory.Iterator(User.query)是可行的。User.query.all()显式发送SQL请求并检索结果,在应用程序正确配置之前,失败。

如果这不起作用(SQLAlchemy文档对Query迭代行为不是很清楚),您可以尝试使用辅助函数:

def lazy_users():
"""Turn `User.query.all()` into a lazily evaluated generator"""
yield from User.query.all()
class ProfileFactory(...):
user = factory.Iterator(lazy_users())

最新更新