我正在使用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。
我做错了什么? 感谢
答案 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。