[英]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.