peewee 将整数字段乘以浮点数以获得线性表达式 - 用 0 替换 0 和 1 之间的数字

peewee multiplying integer fields by floats for linear expression - replaces numbers between 0 and 1 with 0

我正在尝试将线性不等式添加到 peewee 中的 select 语句,

r = r.where((tgt.attrs.NumberMissingOriginalIntrons <= 0.5 * tgt.attrs.NumberIntrons - 0.5))

其中 r 是要添加的现有查询,tgt.attrs 是 table。

然而,当这个转换为SQL时,它看起来像这样:

WHERE ("t1"."NumberMissingOriginalIntrons" <= ((? * "t1"."NumberIntrons") - ?)) [0, 0]

但我真正想要的表达是:

WHERE ("t1"."NumberMissingOriginalIntrons" <= ((? * "t1"."NumberIntrons") - ?)) [0.5, 0.5]

根据一些测试,我意识到只有当值介于 0 和 1 之间时才会失败。这是为什么?这是否与列定义有关 Integer?

是的,这与您的列字段类型有关(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))