为了逃避%,我们可以做如下。
cur.execute("SELECT DATE_FORMAT(END_DATE, '%%Y-%%m-%%d') FROM CALENDAR_DETAILS", ())
但是,如何将dateformat传递给execute方法如下?
cur.execute("SELECT DATE_FORMAT(END_DATE, %s) FROM CALENDAR_DETAILS", "%%Y-%%m-%%d")
我得到cur.fetchone()的结果为'%Y-%m-%d'而不是第二个语句的格式化日期值。
非常感谢。
答案 0 :(得分:1)
简短版本 - 使用:
cur.execute("SELECT DATE_FORMAT(END_DATE, %s) FROM CALENDAR_DETAILS", "%Y-%m-%d")
长(呃)版本:
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 server的格式转义格式IN。这就像给出一个'7777'的格式 - 你总是得到'7777' - 所以在这种情况下你总是得到%Y-%m-%d。