我试图在peewee中的select语句中添加线性不等式,
r = r.where((tgt.attrs.NumberMissingOriginalIntrons <= 0.5 * tgt.attrs.NumberIntrons - 0.5))
r
是添加到的现有查询,tgt.attrs
是一个表格。
但是,当它转换为SQL时,它看起来像这样:
WHERE ("t1"."NumberMissingOriginalIntrons" <= ((? * "t1"."NumberIntrons") - ?)) [0, 0]
但我真正想要的表达是:
WHERE ("t1"."NumberMissingOriginalIntrons" <= ((? * "t1"."NumberIntrons") - ?)) [0.5, 0.5]
根据一些测试,我意识到如果值介于0和1之间,这只会失败。为什么会这样?这是否与列定义为Integer
?
答案 0 :(得分:1)
是的,它与您的列字段类型(Integer
)相关。
尽管如此,您可以使用cast功能:
from playhouse.shortcuts import cast
...
my_field = tgt.attrs.NumberMissingOriginalIntrons
r = r.where((cast(my_field, 'float') <= 0.5 * cast(my_field, 'float') - 0.5))