c.execute("UPDATE Players SET %s = %d WHERE nick=%s",
(parts[1], int(parts[2]), parts[0]))
给我错误
TypeError: %d format: a number is required, not str
我知道 execute
应该只需要 %s
,但是 parts[2]
应该被转换为 int,因为它将是一个 int (作为字符串输入)。
所以,如果我只输入 %s
,当然会出现这个错误:
mysql_exceptions.ProgrammingError: (1064,
"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 "
"''wins' = '450' WHERE nick='xan'' at line 1")
因为 wins
是一个整数。
有什么解决办法?
最佳答案
我看到了几个问题。
可能还有更多。
您不能参数化表名和列名。 但是,您可以执行字符串替换,然后调用
.execute()
。
如果您的程序需要用户输入,您需要警惕 SQL-injection 的可能性攻击。无论参数的类型如何,始终使用
%s
。
MySQLdb 处理任何需要完成的引用。
例子:
sql_stmt = "UPDATE Players SET {} = %s WHERE nick=%s;".format(parts[1])
c.execute(sql_stmt, (int(parts[2]), parts[0]))
关于python - MySQLdb 中执行参数类型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594063/