Python SQL 对象按字典和日期选择数据

Python SQL Object selecting data by dictionary and date

我正在使用 SQLObject,python 的包装器来管理 SQL 查询,Python 2.7。我知道我可以使用字典 select 数据,例如:

restrictions = { ... }
selection = sql_table.selectBy(**restrictions).orderBy('-createdtime')

我还可以通过以下方式查询日期:

selection = sql_table.select(sql_table.q.creatdtime>=datetime.datetime(year, month, day, 0, 0, 0, 0)

但是,我想同时使用两者来按日期和字典配对进行排序。当我尝试像这样将它们放在一起时:

selection = sql_table.select(**restrictions, sql_table.q.creatdtime>=datetime.datetime(year, month, day, 0, 0, 0, 0)

没用。有什么方法可以通过日期时间范围和字典配对来过滤 SQL 查询吗?

已解决问题。如果您在这里遇到同样的问题,这里是解决方案:

由于 SQLpython 的对象包装器支持直接输入 SQL 查询,我选择自己构建它。首先,我将所有限制解压缩为查询

select_string = " AND ".join(str(key) + "=" + str(restrictions[key]) for key in restrictions.keys())

然后我想根据我的日期添加一个限制。我知道我的数据库中存储日期和时间的列称为 createdtime,所以我将字符串作为

select_string += " AND " + 'createdtime>=' + '"' + str(datetime.datetime(year, month, day, 0, 0, 0, 0)) + '"'

请注意 datetime 对象两边的引号,即使它已转换为字符串,它仍然需要引号才能起作用。

因此,我的最终代码如下所示:

select_string = " AND ".join(str(key) + "=" + str(restrictions[key]) for key in restrictions.keys())
if date1:
    select_string += " AND " + 'createdtime>=' + '"' + str(datetime.datetime(year, month, day, 0, 0, 0, 0)) + '"'
if date2:
    select_string += " AND " + 'createdtime<=' + '"' + str(datetime.datetime(year2, month2, day2, 0, 0, 0, 0)) + '"'
selection = sql_table.select(select_string).orderBy('-createdtime')
return selection