【发布时间】:2013-01-11 19:55:27
【问题描述】:
我有一个表,其中包含一个名为region_code 的列,其数据类型为Integer。在我的 Python 程序中,我有这一行:
region = session.query(Region).filter(Region.region_code/100 == region_prefix).one()
这里的重要部分是选择的过滤器方法
Region.region_code/100 == region_prefix
其中 region_code 是表中的整数列,region_prefix 变量保存一个整数值
region_code 是表中的整数列,其中包含 1199, 1200, 1300, 1499 等值,而 region_prefix 变量(来自程序)包含 11, 12, 13, 14 等整数值。
我现在想要使用此过滤器选项实现的是对 region_code 执行整数除法(因此将所有内容都删除到小数位后面),以便能够将其与 region_prefix 进行比较。
示例:
region_prefix = 11
假设Region表中存在一个带有
的条目region_code = 1199
过滤器中的计算应该是这样的
1199 / 100 = 11
因此,有了这个结果,我可以过滤region_prefix (11=11)。
这适用于 MSSQL (Microsoft)。
不幸的是(就我而言)MySQL 除法运算符/ 不进行整数除法。所以1199/100 的结果将是11.99,所以我的查询不会在数据库中找到合适的条目(因为 11.99 != 11)。
然而 MySQL 实际上已经实现了除法:DIV 操作符。
所以下面的 SQL 查询对我来说很好用:
SELECT * FROM Region where region_code DIV 100 = 11;
所以我的问题是:
如何让 SQLAlchemy filter 方法使用 DIV 而不是 / 运算符?这可能吗?还是使用本机查询的唯一解决方法?
【问题讨论】:
标签: python mysql sqlalchemy