在SQLAlchemy筛选器中使用变量

在SQLAlchemy筛选器中使用变量,sqlalchemy,Sqlalchemy,我想使用这样一个变量: myVariable = 0.5 myQuery.filter(myTable.column1 == myVariable*myTable.column2) 当我将all()应用于我的查询时,没有结果。 如果我用它的值替换这个变量,它就可以了 问题在于最后两行(系数1)。 在最后一行中,如果我将factor1替换为它的值,就可以了。我刚刚测试了一些类似于您描述的代码的内容,但无论我使用变量还是文字,都会得到结果: myVariable = 0.5 myQuery.fi

我想使用这样一个变量:

myVariable = 0.5
myQuery.filter(myTable.column1 == myVariable*myTable.column2)
当我将all()应用于我的查询时,没有结果。 如果我用它的值替换这个变量,它就可以了


问题在于最后两行(系数1)。
在最后一行中,如果我将factor1替换为它的值,就可以了。

我刚刚测试了一些类似于您描述的代码的内容,但无论我使用变量还是文字,都会得到结果:

myVariable = 0.5
myQuery.filter(myTable.column1 == myVariable*myTable.column2).all()
vs

您可以发布正在生成的文本SQL吗?i、 e.调查结果

print myQuery

对于这两种情况?

Python使用的IEEE浮点数,许多数据库并不总是像学校数学那样工作。0.93起作用的原因是,这是您最初存储在数据库中的按位精确的值。但是在减法中出现了轻微的错误

请参见以下示例:

>>> print "%0.64f" % (1.0 - 0.07)
0.9299999999999999378275106209912337362766265869140625000000000000
>>> print "%0.64f" % (0.93)
0.9300000000000000488498130835068877786397933959960937500000000000
在这里读更多,然后你可以读到非常深入的文章


一种解决方案是在Python中使用
decimal.decimal
,在SQL中使用
Numeric

好吧,它稍微复杂一点。。。也许我用错误的方式编码。我把原始代码放在最初的帖子里。你的代码不一样!你的代码之所以能工作,是因为在IEEE中,浮点0.5是精确的(它是二进制的0.1),而0.03不能精确地用二进制表示。令人惊讶!如果我将最后一行替换为factor1=0.93,它确实有效……当我设置factor1=0.93时,它在请求中的值是0.93000000000000005。当我设置factor1=1-0.07时,它在请求中的值是0.92999999994。数据库中的值为0.93*1000。
print myQuery
>>> print "%0.64f" % (1.0 - 0.07)
0.9299999999999999378275106209912337362766265869140625000000000000
>>> print "%0.64f" % (0.93)
0.9300000000000000488498130835068877786397933959960937500000000000