sqlite-запрос с strftime всегда возвращает 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' и он работает правильно.

Может кто-нибудь дать мне намек на то, что мне не хватает?

2 Solutions collect form web for “sqlite-запрос с strftime всегда возвращает None”

Измените его на

 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' , казалось, 'unixepoch' результат значения None .

Большое спасибо всем, кто пытался помочь …

  • Преобразование строки во времени с помощью python
  • Где хранить общие строки strftime типа («% d /% m /% Y»)
  • Python: strftime () UTC Offset Не работает как ожидается в Windows
  • Как я могу переместить объект даты в другой языковой стандарт?
  • Использовать datetime.strftime () до 1900 года? («Требуется год> = 1900»)
  • Python - лучший язык программирования в мире.