mysqldb UPDATE函数Python错误str

Posted

技术标签:

【中文标题】mysqldb UPDATE函数Python错误str【英文标题】:mysqldb UPDATE function Python error str 【发布时间】:2014-10-27 00:02:06 【问题描述】:

我需要您的帮助来通过 python 更新我的 mysqldb 中的数据。一切正常,包括读取、插入等。 以下查询不起作用...

cursor.execute("UPDATE einzel.check SET Kursbuch = %s WHERE analysen.Nummer = %s" (Decimal(kurs),i[8]))

我尝试了几个用于 kurs 和 i[8] 的选项,总是收到以下消息:

cursor.execute("UPDATE einzelanalyse.analysen SET Kurs bei empf = %s WHERE analysen.Nummer = %s" (Decimal(kurs),i[12])) TypeError: 'str' 对象不可调用

str(i[8]) 也不起作用。

“kurs”是一个小数。在程序中,我将它与 Decimal(kurs) 一起使用,我可以毫无问题地计算。要写入数据库“Kurs bei empf”的值的格式为 decimal(10,2)

i[12] 是我之前获取的数据库条目的一部分。在数据库中格式为 int(11)

提前感谢您的帮助!

Grüße!

【问题讨论】:

我不清楚。小数是转换函数: 您是否尝试过不使用Decimal 并放置一些测试值(例如1.01)来运行相同的查询? from decimal import * 然后可以使用 Decimal (xxx) 将字符串转换为十进制 好点!现在我尝试了 cursor.execute("UPDATE einzelanalyse.analysen SET Kurs bei empf = %s WHERE analysen.Nummer = %s" (1.01, 178317)) 它也不起作用。但现在我看到了问题,我认为是“Kurs bei empf”中的空格。会是这样吗? 【参考方案1】:

试试这个

cursor.execute("UPDATE einzelanalyse.analysen SET Kurs bei empf = %s WHERE analysen.Nummer = %s"% (Decimal(kurs),i[12]))

您缺少字符串格式化所需的额外%,但建议使用 mysql 格式

cursor.execute("UPDATE einzelanalyse.analysen SET Kurs bei empf = %s WHERE analysen.Nummer = %s", (Decimal(kurs),i[12]))

【讨论】:

在同一时间。这是我以前从未发生过的。我给了你一个 +1 太棒了!有用!它越神秘,我就越有可能在某个地方出现错误......感谢大家的支持!【参考方案2】:

错误是您在 UPDATE 语句和元组之间缺少逗号。请将代码更改为:

cursor.execute("""UPDATE einzelanalyse.analysen 
                     SET Kurs bei empf = %s 
                   WHERE analysen.Nummer = %s""", (Decimal(kurs),i[12]))
                                              # ^ this is where the comma is necessary

之前发生的事情是你有一个字符串,例如“abc”,然后是括号/括号,例如"abc" (...) 看起来您正在尝试调用字符串。因此错误TypeError: 'str' object is not callable 是有道理的。

【讨论】:

【参考方案3】:
#Create strings for values
empf = Decimal(kurs)
analysen = i[12]

#python notation for placeholders should be noted as 0 1 etc. instead of %s 
#use .format(string,string) to point back to 0 and 1
# Create a query string
query = "update einzelanalyse.analysen set kurs bei empf = 0 where  analysen.nummer 1".format(empf,analysen)

# Let the cursor just run the prebuild query string
cursor.execute(query)

【讨论】:

以上是关于mysqldb UPDATE函数Python错误str的主要内容,如果未能解决你的问题,请参考以下文章

python mysqldb导入错误

python使用MySQLdb遇到的事务问题

MySQLdb Python 插入 %d 和 %s

Python - Mysqldb 安装错误 [错误:命令错误退出状态为 1:]

Ubuntu中的Python-MySQLdb错误

Python 导入 MySQLdb 错误 - Mac 10.6