1

我想使用这样的变量:

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

当我将 all() 应用于 myQuery 时,我没有结果。如果我用它的值替换变量,就可以了。


queryBidOffer = session.query(BidOffer.id, BidOffer.price, BidOffer.qmin, BidOffer.qmax)
queryBidOffer = queryBidOffer.join(Equipment).filter(BidOffer.equipment==Equipment.id, Equipment.equipment_type.in_(['L','P','W','M']))
queryBidOffer_day = queryBidOffer.filter(BidOffer.day == day)
queryBidOffer_hour = queryBidOffer_day.filter(BidOffer.start_hour == timeSlice)

queryBidOffer_hour = queryBidOffer_hour.join(EquipmentDayHour, BidOffer.equipment == EquipmentDayHour.equipment)
queryBidOffer_hour = queryBidOffer_hour.filter(EquipmentDayHour.day == day)
queryBidOffer_hour = queryBidOffer_hour.filter(EquipmentDayHour.hour == timeSlice)

factor1 = 1.00 - 0.07
queryBidOffer_hour = queryBidOffer_hour.filter(BidOffer.equipment == EquipmentDayHour.equipment, factor1*func.abs(EquipmentDayHour.ref_prog) == 930)

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

4

2 回答 2

1

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

例如看这个:

>>> print "%0.64f" % (1.0 - 0.07)
0.9299999999999999378275106209912337362766265869140625000000000000
>>> print "%0.64f" % (0.93)
0.9300000000000000488498130835068877786397933959960937500000000000

在这里阅读更多我应该如何进行浮点比较,然后对于非常深入的文章,您可以阅读每个计算机科学家应该了解的关于浮点运算的知识......

一种解决方案是decimal.Decimal在 Python 和NumericSQL 中使用。

于 2012-07-06T16:25:08.080 回答
-1

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

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

对比

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

您可以发布正在生成的文字 SQL 吗?即结果

print myQuery

对于这两个?

于 2012-07-02T16:34:37.230 回答