我有以下功能:
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'
部分的情况下运行类似的查询,并且运行正确。
有人能给我一些我缺少的东西吗?
答案 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中使用?
符号)
答案 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
值结果。
非常感谢所有试图提供帮助的人......