带有strftime的sqlite查询始终返回None

时间:2014-12-28 15:24:07

标签: python sqlite strftime

我有以下功能:

for i in range(1,13):
        q_totes_1="""SELECT sum(kaxia) FROM es_data WHERE strftime('%%m',es_date)='%s' AND es_orig=1"""%(str(i))
        self.cur.execute(q_totes_1)
        m_totes_1=self.cur.fetchone()[0]
        print q_totes_1
        if m_totes_1 is None:
            m_totes_1=0.0

它总是返回None,而我知道我应该有另一个结果。从print q_totes_1我得到了我在sqlite上直接执行的查询,我得到了所需的结果。所有导入都是正确的,因为我已经在同一类的其他函数中成功使用它们。

我尝试在没有strftime('%%m',es_date)='%s'部分的情况下运行类似的查询,并且运行正确。

有人能给我一些我缺少的东西吗?

2 个答案:

答案 0 :(得分:1)

将其更改为

self.cur.execute( """SELECT sum(kaxia) FROM es_data WHERE strftime('%m',es_date)= ? AND es_orig=1""",(str(i),) )

您的代码将是

for i in range(1,13):
    x = self.cur.execute( """SELECT sum(kaxia) FROM es_data WHERE strftime('%m',es_date)= ? AND es_orig=1""",(str(i),) )
    m_totes_1=x.fetchone()[0]
    print q_totes_1
    if m_totes_1 is None:
        m_totes_1=0.0

您也是SQL Injection的受害者。 (始终在DB中使用?符号)

enter image description here

答案 1 :(得分:0)

最后,我得到了执行的查询,令我失望的是,它非常简单:

查询应该具有这种格式(我倾向于忽略注入的可能性,因为与DB的唯一交互将通过python应用程序):

SELECT sum(kaxia) FROM es_data WHERE strftime('%%m',es_date,'unixepoch')= '%s'AND es_orig=1"""%(str(i))

缺少'unixepoch'修饰符似乎输出None值结果。

非常感谢所有试图提供帮助的人......