SQLAlchemy中的分区

时间:2014-11-06 15:55:18

标签: python sqlalchemy

在SQLAlchemy中,我希望除以一个数字,然后向下舍入。例如。我正在寻找以下

的Python等价物
>>> 3.1415 // 0.1
31.0

可悲的是,SQLAlchemy列元素似乎不支持__floordiv__

>>> mycol // 3
***TypeError: unsupported operand type(s) for //: 'Column' and 'int'

有没有办法解决这个问题?是否等同于math.floor

1 个答案:

答案 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()
相关问题