Как передать dateformat в качестве аргумента методу выполнения Mysqldb

#python #string #python-2.7 #mysql-python

#python #строка #python-2.7 #mysql-python

Вопрос:

Для экранирования% мы можем сделать, как показано ниже.

 cur.execute("SELECT DATE_FORMAT(END_DATE, '%%Y-%%m-%%d') FROM  CALENDAR_DETAILS", ())
  

Но есть идеи, как передать dateformat методу выполнения, как показано ниже?

 cur.execute("SELECT DATE_FORMAT(END_DATE, %s) FROM  CALENDAR_DETAILS", "%%Y-%%m-%%d")
  

Я получаю результат для cur.fetchone() как ‘%Y-%m-%d’ вместо отформатированного значения даты для второго оператора.

Большое спасибо.

Комментарии:

1. Что вы имеете в виду под «получением в результате»? можете ли вы показать cur._executed ?

2. @TalKremerman cur._executed выдает строку без указания % как «ВЫБРАТЬ DATE_FORMAT(END_DATE, ‘%%Y-%%m-%%d’) ИЗ CALENDAR_DETAILS»

Ответ №1:

Короткая версия — использовать:

 cur.execute("SELECT DATE_FORMAT(END_DATE, %s) FROM  CALENDAR_DETAILS", "%Y-%m-%d")
  

Длинная (er) версия:

execute форматирует строку запроса, поэтому, когда у вас есть % в вашем запросе — вам нужно экранировать их (вашу первую строку). Однако, когда % это не в запросе, а в параметре — нет необходимости экранировать. При запуске:

 cur.execute("SELECT DATE_FORMAT(END_DATE, %s) FROM  CALENDAR_DETAILS", "%%Y-%%m-%%d")
  

Выполняемый запрос

 SELECT DATE_FORMAT(END_DATE, '%%Y-%%m-%%d') FROM CALENDAR_DETAILS
  

т.Е. Вы экранируете формат В формате, который вы предоставляете серверу sql. Это все равно, что указать формат ‘7777’ — вы всегда получаете ‘7777’ — так что в этом случае вы всегда получаете %Y-%m-%d .