在 factory boy 中,可以創建一個與另一個表有關系的 sqlalchemy 物件。從為 django 制作的填充表中進行選擇有一個常見的方法,我現在想為燒瓶做這個。
所以我想我已經使用了這條線。
user = factory.Iterator(User.query.all())
但當然它不起作用。我收到一個錯誤,提示沒有應用程式背景關系。它在檔案中指出,在第一次呼叫 Userfactory 之前不會評估查詢,但是在匯入時會發生錯誤。
我想要一個從我已經創建的物件中選擇外鍵的工廠。我怎么能在燒瓶中做到這一點?
uj5u.com熱心網友回復:
該示例適用于 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())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/325162.html
標籤:Python 烧瓶 烧瓶-sqlalchemy 工厂男孩
