我正在学习python编程,并尝试从简单的select查询开始实现最安全的mysql查询。问题是,每当我在查询中使用coma时,都会出现以下错误:
cursor.execute(query)
File "C:\Users\username\AppData\Local\Programs\Python\Python37-32\lib\site-packages\mysql\connector\cursor.py", line 536, in execute
stmt = operation.encode(self._connection.python_charset)
AttributeError: 'tuple' object has no attribute 'encode'
我知道coma本身并不是问题的根源,但我尝试了许多不同的mysql语法,每次使用come,我都会遇到“attributeerror:'tuple'object has no attribute'encode'”错误。
我还尝试更改mysql数据库编码-没有任何更改。代码如下。
import mysql.connector
conn = mysql.connector.connect(
charset='utf8',
# init_command='SET NAMES UTF8',
host="10.0.0.234",
user="x",
passwd="x>",
database="x",
)
print(conn.is_connected())
param = "test"
cursor = conn.cursor()
# =========== query below does work ========
# query = ("SELECT * from list WHERE username LIKE '%test%'")
# ============ query below does work =======
# query = ("SELECT * from list HAVING username = '%s'" % param)
# ============ query below doesn't work =====
# query = ("SELECT * from list HAVING username = %s", (param,))
# ============= query below doesn't work =====
query = "SELECT * from list WHERE username = :name", {'name': param}
cursor.execute(query)
result = cursor.fetchall()
for x in result:
print(x)
conn.close()
你知道我做错什么了吗?
1条答案
按热度按时间xqk2d5yq1#
答案有点棘手,但本质上是因为“query”变量的实际值是什么。。。
例如:
上面的3和4都没有调用mysql
execute
使用您期望的参数(请参阅此处的api)。您可能需要执行以下操作之一:将查询元组解压到单独的变量中,并用它们调用函数
只需索引到查询元组中
使用“解包参数列表”(splat运算符)