简单查询的Python MySQL语法错误

时间:2015-03-23 02:32:06

标签: python mysql

我正在使用python 3.x的MySQL连接器,并且使用简单的代码来解决这个问题:

rest_cursor.execute("SELECT * FROM restaurant WHERE r_id=%s",(r_id))

其中r_id是整数。 这导致抛出异常:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1

这种格式似乎与python-MySQL示例页面中的示例匹配:http://dev.mysql.com/doc/connector-python/en/connector-python-example-cursor-select.html

我做错了什么? 感谢

3 个答案:

答案 0 :(得分:2)

你应该尝试在params列表中使用逗号:

rest_cursor.execute("SELECT * FROM restaurant WHERE r_id=%s",(r_id,))

在Python中,您需要这样做以获得单个项目列表:

(1) → 1
(1,) → (1,)

答案 1 :(得分:0)

您需要使用变量绑定来替换查询中的%s值。

答案 2 :(得分:0)

在字符串格式中,整数必须使用%d运算符,字符串必须使用%s运算符。在您的示例链接中,它们将日期作为游标参数中的字符串文字传递。

对于您的示例,请使用%d

rest_cursor.execute("SELECT * FROM restaurant WHERE r_id=%d;",(r_id))

或者,您可以在format()内传递查询字符串之前使用cursor.execute()构建查询字符串:

query = "SELECT * FROM restaurant WHERE r_id={};".format(r_id)
rest_cursor.execute(query)

此外,format()可以使用任何指定的元素甚至列表!它正在成为格式化字符串的首选方式,而不是modulo %运算符。请参阅此SO post