我们正在调查我们是否应该从SQLalchemy迁移到我们的项目的peewee。我们希望禁用延迟加载属性,以便只有在执行的查询中显式连接它们时才加载它们。例如:
for topping in Topping.select().where(Topping.stock > 0):
print " - %s (%s): %s pieces left" % (topping.name, topping.category.name, topping.stock)
打印:
在我的查询中,我没有明确加入ToppingCategory,但它似乎取了它的名字。有没有办法禁用它?
答案 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