使用烧瓶时从工厂男孩中的 table 中选择
Choosing from a populated table in factory boy while using flask
在 factory boy 中,可以创建一个与另一个对象有关系的 sqlalchemy 对象 table。 Choosing from a populated table 有一个为 django 制作的通用配方,我现在想为 flask 做这个。
所以我认为我用过这条线。
user = factory.Iterator(User.query.all())
但是当然不行。我得到一个没有应用程序上下文的错误。它在文档中指出,在第一次调用 Userfactory 之前不会评估查询,但是在导入时会发生错误。
我想要一个从我已经创建的对象中选择外键的工厂。我怎样才能在烧瓶中做到这一点?
该示例适用于 Django,因为 QuerySet 是惰性的;即请求仅在尝试对其进行迭代时命中数据库。
FactoryBoy 的迭代器只会在第一次调用工厂时开始迭代提供的生成器。
对于 SQLAlchemy,您需要一种方法来 return 生成器而不是列表;我认为这适用于 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())
在 factory boy 中,可以创建一个与另一个对象有关系的 sqlalchemy 对象 table。 Choosing from a populated table 有一个为 django 制作的通用配方,我现在想为 flask 做这个。
所以我认为我用过这条线。
user = factory.Iterator(User.query.all())
但是当然不行。我得到一个没有应用程序上下文的错误。它在文档中指出,在第一次调用 Userfactory 之前不会评估查询,但是在导入时会发生错误。
我想要一个从我已经创建的对象中选择外键的工厂。我怎样才能在烧瓶中做到这一点?
该示例适用于 Django,因为 QuerySet 是惰性的;即请求仅在尝试对其进行迭代时命中数据库。 FactoryBoy 的迭代器只会在第一次调用工厂时开始迭代提供的生成器。
对于 SQLAlchemy,您需要一种方法来 return 生成器而不是列表;我认为这适用于 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())