【问题标题】:mysqldb UPDATE function Python error strmysqldb UPDATE函数Python错误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”中的空格。会是这样吗?

标签: python database mysql-python


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 2012-07-11
      • 2012-11-04
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多