在SQLAlchemy中,我希望除以一个数字,然后向下舍入。例如。我正在寻找以下
的Python等价物>>> 3.1415 // 0.1
31.0
可悲的是,SQLAlchemy列元素似乎不支持__floordiv__
>>> mycol // 3
***TypeError: unsupported operand type(s) for //: 'Column' and 'int'
有没有办法解决这个问题?是否等同于math.floor
?
答案 0 :(得分:5)
请记住,对列执行操作实际上是在创建一个将由数据库执行的表达式。在不同的数据库之间似乎没有一种标准的方法来“强制”整数除法。
答案取决于数据库。 PostgreSQL具有执行整数除法的div
函数。
from sqlalchemy import func
session.query(func.div(mycol, 3)).scalar()
另一方面,SQLite没有内置的方法来执行此操作,但是如果您不关心负值的正确性(在分数部分上插入切块,而地板上)则可以将结果转换为整数应始终返回小于输入的数字。
from sqlalchemy import cast, Integer
session.query(cast(mycol / 3, Integer)).scalar()
# -3.14 returns -3, but should return -4
如果你想要一些“通用”解决方案,可以使用case语句,但这很难看。
from sqlalchemy import case, cast, Integer
session.query(cast(case([(mycol < 0, mycol - 1)], else_=mycol), Integer)).scalar()