【问题标题】:SQL query in python script, how to get quotes around a parameter?python脚本中的SQL查询,如何获取参数的引号?
【发布时间】:2015-04-24 04:37:20
【问题描述】:

我需要重写处理 POST 请求并将 SQLite3 数据库查询到 python 的 php 脚本。查询现在看起来像这样

cursor.execute("SELECT * from "+requestedProgram+" WHERE start LIKE ? ORDER BY start", (requestedDate,))

WHERE 条件起作用之前的第一部分(它并不优雅,但不幸的是,似乎无法对表名进行参数化)。

但是,为了使 LIKE 起作用,我需要在 requestedDate 字符串周围加上引号。如何获取参数/变量的引号?

另一方面:考虑到游标的性质,ORDER BY 语句是否会做任何事情?

【问题讨论】:

    标签: python sql sqlite


    【解决方案1】:

    使用单引号,不要在 requestedDate 后面使用尾随逗号(它会对其进行元组化),并在字符串中添加尾随通配符。

    cursor.execute("SELECT * from "+requestedProgram+" WHERE start LIKE '?' ORDER BY start", requestedDate + '%')
    

    编辑:每个对话线程都更新了下面的 OP。为偶然发现此问题的人添加了详细信息。

    【讨论】:

    • 我试过了,但是这样做时我得到了错误sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.,就像使用常规引号暗示 ? 不被识别为参数时一样。
    • 使用%s 而不是?
    • 这很酷 - 我想我想通了!当我使用cursor.execute("SELECT ... " (requestedDate,)) 时,我遇到了同样的错误,然后我将其更改为cursor.execute("SELECT ...", str(requestedDate)) 并且它起作用了。
    • Gotcha...尝试"...LIKE '?' ORDER BY start", str(requestedDate) + '%') per stackoverflow.com/questions/3105249/… 如果start 的值始终以日期戳开头,您应该使用导致LIKE '20140701%' 的内容。
    • 是的,我做过类似的事情。我将离开 str() ,因为它是一个正确的字符串,并且它通过逗号的元组化工作。再次感谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2014-06-12
    • 2020-05-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多