我正在使用SQLObject,一个用于管理SQL查询的python包装器,使用Python 2.7。我知道我可以使用如下字典来选择数据:
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查询?
答案 0 :(得分:2)
修正了问题。如果你遇到同样的问题,这里有解决方案:
由于python的SQLObject包装器支持输入直接的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