peewee乘以浮点数乘以整数字符表示线性表达式 - 用0

时间:2016-02-28 19:10:13

标签: python peewee

我试图在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

有关

1 个答案:

答案 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))