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

时间:2016-08-19 17:47:58

标签: python mysql python-2.7 dictionary sqlobject

我正在使用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查询?

1 个答案:

答案 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