MySQLdb中执行参数类型的问题

时间:2012-05-15 04:14:45

标签: python string execute mysql-python

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是一个整数。 解决方案是什么?

1 个答案:

答案 0 :(得分:10)

我看到了一些问题 可能会有更多。

  1. 您无法参数化表格或列名称。 但是,您可以执行字符串替换,然后调用.execute() 如果您的程序需要用户输入,那么您需要警惕SQL-injection攻击的可能性。

  2. 无论参数类型如何,始终使用%s MySQLdb处理任何需要完成的引用。

  3. 示例:

    sql_stmt = "UPDATE Players SET {} = %s WHERE nick=%s;".format(parts[1])
    c.execute(sql_stmt, (int(parts[2]), parts[0]))