在peewee中禁用延迟加载

时间:2017-08-02 08:50:08

标签: python python-2.7 peewee

我们正在调查我们是否应该从SQLalchemy迁移到我们的项目的peewee。我们希望禁用延迟加载属性,以便只有在执行的查询中显式连接它们时才加载它们。例如:

    for topping in Topping.select().where(Topping.stock > 0):
        print " - %s (%s): %s pieces left" % (topping.name, topping.category.name, topping.stock)

打印:

  • 莫扎里拉奶酪(奶酪):剩下50件
  • Basil(Herb):剩下100件
  • 意大利辣香肠(肉):剩下60件

在我的查询中,我没有明确加入ToppingCategory,但它似乎取了它的名字。有没有办法禁用它?

1 个答案:

答案 0 :(得分:0)

它会花费您每行查询来查找类别。查看有关N + 1个查询问题的文档:http://docs.peewee-orm.com/en/latest/peewee/querying.html#nplusone

当您访问FK(类别)时,如果它不可用,则peewee将加载它,这需要SELECT语句。

在您的示例中,您需要:

a)急切加载该类别 b)不要访问类别

对于a),你会写:

 query = Topping.select(Topping, ToppingCategory.name).where(Topping.stock > 0)
 for topping in query:
     print topping.name, topping.category.name