繁体   English   中英

带strftime的sqlite查询始终返回None

[英]sqlite query with strftime always returns None

我有以下功能:

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'部分,它可以正常运行。

有人可以提示我我所缺少的吗?

更改为

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的受害者。 (在数据库中始终使用?符号)

在此处输入图片说明

最终,我执行了该查询,但令我失望的是它非常简单:

查询应采用这种格式(我倾向于忽略注入的可能性,因为与数据库的唯一交互将通过python应用程序进行):

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM