【问题标题】:How to pass dateformat as an argument to the Mysqldb execute method如何将 dateformat 作为参数传递给 Mysqldb 执行方法
【发布时间】:2014-08-09 15:15:30
【问题描述】:

为了逃避 % 我们可以做如下。

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

但是有什么想法,如何将日期格式传递给执行方法,如下所示?

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

我得到 cur.fetchone() 的结果为 '%Y-%m-%d' 而不是第二条语句的格式化日期值。

非常感谢。

【问题讨论】:

  • “得到结果”是什么意思?你能显示cur._executed吗?
  • @TalKremerman cur._executed 给出字符串而不转义 % 作为 "SELECT DATE_FORMAT(END_DATE, '%%Y-%%m-%%d') FROM CALENDAR_DETAILS"

标签: python string python-2.7 mysql-python


【解决方案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 的格式转义格式。这就像给出“7777”的格式——你总是得到“7777”——所以在这种情况下你总是得到%Y-%m-%d。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多