【问题标题】:Python MySQL Parameter Query Programming Error: 1064 (42000)Python MySQL 参数查询编程错误:1064 (42000)
【发布时间】:2020-06-24 19:50:45
【问题描述】:

我想使用 python 程序查询 MySQL 表,但我得到了这个错误:

ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ''10' OFFSET '0'' 附近使用正确的语法

令人困惑的是,当我不使用变量时,查询运行完美,如下所示:

cur = connection.cursor()
query = "SELECT * FROM DB.Table LIMIT 10 OFFSET 0"

cur.execute(query)

records = cur.fetchall()

for record in records:
    print(record)

但我需要逐批选择数据,并且必须在 for 循环中执行上述命令。我需要定义变量。但我收到错误 1064。这是有错误的代码:

i = 0
p = str(i)
j = 10
q = str(j)

cur = connection.cursor()
query = "SELECT * FROM DB.Table LIMIT %s OFFSET %s"

cur.execute(query,(q,p,))

records = cur.fetchall()

for record in records:
    print(record)

感谢您的帮助。

【问题讨论】:

    标签: python mysql sql limit offset


    【解决方案1】:

    您可以使用cur.execute(query % (q,p)) 或

    query = "SELECT * FROM DB.Table LIMIT {} OFFSET {}"
    cur.execute(query.format(q, p))
    

    【讨论】:

    • 注意:这个答案改变了 OP 对不明智的字符串 SQL 连接的 SQL 参数化的使用。
    【解决方案2】:

    简单地说,不要将参数化值转换为字符串,因为错误显示单引号:

    i = 0
    j = 10
    
    cur = connection.cursor()
    query = "SELECT * FROM DB.Table LIMIT %s OFFSET %s"
    
    cur.execute(query, (j, i))
    

    【讨论】:

    • 谢谢,它有效。但是当我将它与左连接 query = "SELECT * FROM DB.Table1 LIMIT %s OFFSET %s LEFT JOIN DB.Table2 ON Table1.id =Table2.id" 和 cur.execute(query, (j, i)) 一起使用时,我遇到了同样的错误。
    • LIMIT 和 OFFSET 只能在查询的最后运行以限制整个连接的结果集。考虑使用子查询或 CTE,然后加入外层。
    猜你喜欢
    • 2011-12-06
    • 2018-03-05
    • 1970-01-01
    • 2021-11-02
    • 2014-11-18
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多