如何用peewee选择if语句

时间:2014-10-20 09:05:07

标签: python orm peewee

我正在获取所有类别并使用具有帖子类别的item_category加入类别表。 我的sql就是那样

SELECT category.*,IF(item_category.category_id=NULL, 0,1) is_selected
FROM category 
LEFT JOIN item_category ON category.category_id=item_category.category_id AND item_id=1

我尝试了但是它没有用。因为使用时出现python throw错误

Category.select(Category, ItemCategory, fn.if(ItemCategory.category_id==None, 0, 1) )

if语句的正确用法是什么? 感谢。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,但我不知道这是最好的方法。 我改变了' fn.if'到' fn.IF'它工作了

Category.select(Category, ItemCategory, fn.IF(ItemCategory.category_id==None, 0, 1) ) 

答案 1 :(得分:0)

使用Case函数来获取所需的输出,例如IF / ELSE(在peewee官方代码源https://github.com/coleifer/peewee/blob/853d57005d0dbc49a0ff24560531c637ceeb4f25/peewee.py#L1732之后)

from peewee import Case

Category.select(
    Category,
    ItemCategory,
    Case(None, [((ItemCategory.category_id==None), 0)], 1)
)

此处,Case的参数为-

  • 第一个参数:predicate的默认值为CASE
  • 第二个参数:expression_tuples,其中包含条件(ItemCategory.category_id==None)和条件传递的值0
  • 第三个参数:ELSE值(1