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))
我正在尝试将线性不等式添加到 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))