#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 .