【问题标题】::TypeError: %d format: a number is required, not str: even numbers were given in python pandas:TypeError: %d format: a number is required, not str:偶数在python pandas中给出
【发布时间】:2018-06-18 04:58:21
【问题描述】:

我正在尝试使用参数化查询更新 mysql 数据库中的值。但运行以下代码后:

df = pd.read_sql('SELECT * FROM df LIMIT 3', con=db_connection)
print(df.shape)
labels = ('I1','I2','I3')
ids = (123456,123457,123458)
data = (labels,ids)
cursor = db_connection.cursor()
for i in df.id:
    cursor.execute("UPDATE df SET label = %s WHERE id= %d",data)
    db_connection.commit()
db_connection.close()

我收到此错误: 类型错误:%d 格式:需要一个数字,而不是 str

'id' 的数据类型在数据库中是 int。我只提供数字。不知道为什么会抛出这样的错误......

【问题讨论】:

标签: python mysql parameterized-query


【解决方案1】:

感谢 AlEmerich 的帮助, 我以这种格式提供数据

labels = ('I1','I2','I3')
ids = (123456,123457,123458)
data = (labels,ids)
data
(('I1', 'I2', 'I3'), (123456, 123457, 123458))

但是当我这样做时:

data = (('I1',123456),('I2',123457),('I3',123458))

现在可以正常使用了。

【讨论】:

    【解决方案2】:
    cursor.execute("UPDATE df SET label = %s WHERE id= %d",data)
    

    你有一个元组的元组数据。似乎编译器试图格式化 '%d' 中的 'I2' 变量。

    【讨论】:

    • 我没有时间设置数据库进行测试,但您可以尝试类似的方法: cursor.execute("UPDATE df SET label = %s WHERE id= %d",(data [0],数据[1]))。如果可行,我将编辑答案。
    • Nervermind,我不认为我在文档中进行了一些挖掘之后是正确的。您可以尝试用 %s 替换 %d 吗?根据此链接 (dev.mysql.com/doc/connector-python/en/…),似乎即使是 int 也不需要 %d。
    【解决方案3】:

    在我的例子中,我使用的是 flask_sqlalchemy,但我在创建模型时犯了一个错误

    我写的

    class LocationModel(db.Model):
          address = db.String(db.String(50))
    

    改为

    class LocationModel(db.Model):
          address = db.Column(db.String(50))
    

    【讨论】:

      猜你喜欢
      • 2020-03-06
      • 1970-01-01
      • 2021-12-05
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2017-05-08
      • 2017-01-23
      相关资源
      最近更新 更多