由strftime SQLite的查询总是返回无(sqlite query with strftim

2019-10-21 12:27发布

我有以下功能:

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'部分,将其正确运行。

有人能给我我失去了我的暗示?

Answer 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注入的受害者。 (请务必使用?在DB的符号)



Answer 2:

最后我得到的查询执行并令我失望的是烦人简单:

查询应该有这样的格式(我倾向于忽视注射剂的可能性与数据库中唯一的互动将通过Python应用程序):

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

缺少的'unixepoch'修改似乎输出None值的结果。

非常感谢所有谁试图帮助...



文章来源: sqlite query with strftime always returns None