2016-02-28 30 views
0

我想一個線性不等式添加到peewee select語句,peewee由彩車線性表達乘以整數字段 - 代替0和1之間的數字以0

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

是的,它與您的列字段類型(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))