【问题标题】:Unable to update the database using the cur.execute?无法使用 cur.execute 更新数据库?
【发布时间】:2017-03-22 02:32:34
【问题描述】:

我正在侦听 python TCP 服务器上的端口。我能够在命令行上打印接收到的数据。现在,我想更新我的数据库。因为,我经常更新数据库,所以我使用 multi=True。但是,我不断收到错误消息:

cur.execute(query1, multi=True)

AttributeError: 'tuple' 对象没有属性 'encode'

下面是我的代码:

print "received data:", data
query1= "UPDATE tablename SET col_value = %s where id= %s",(data[0:3], data[4:])

cur.execute(query1,multi=True)

样本数据为:334,6

有谁知道,如何解决这个问题?

【问题讨论】:

  • 不应该 query1 类似于 query1= "UPDATE tablename SET col_value = %s where id= %s" % (data[0:3], data[4:])
  • @Fejs:不,这会导致 SQL 注入漏洞。
  • 我同意。我想指出可能使用的语法无效。

标签: python mysql sql database mysql-connector


【解决方案1】:

根据documentationmulti=True用于一次执行多条SQL语句,不带参数。对于单个UPDATE,您可以使用:

print "received data:", data
query1 = "UPDATE tablename SET col_value = %s where id= %s"
cur.execute(query1, (data[0:3], data[4:]))

【讨论】:

  • 文件“testPythonTCPServer.py”,第 34 行,在 clientthread 文件“C:\Python27\lib\site-packages\mysql\connector\cursor.py”,第 528 行,在执行 stmt = operation .encode(self._connection.python_charset) cur.execute(query1,(data[0:3], data[4:])) AttributeError File "C:\Python27\lib\site-packages\mysql\connector\cursor. py",第 528 行,在执行中:'tuple' 对象没有属性 'encode' stmt = operation.encode(self._connection.python_charset) AttributeError: 'tuple' 对象没有属性 'encode'
  • 我想使用'multi=True',因为早些时候我遇到了一个异常,即数据库没有发生多次更新。并且,在 cmd 提示符中建议使用 multi=True。
  • 您似乎仍在将 tuple 传递给 execute() 而不是 string。请注意,在我的示例中,字符串后面没有逗号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2018-12-28
相关资源
最近更新 更多