:typeerror:%d格式:需要数字,而不是str:python中给出了偶数

nwlqm0z1  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(370)

我正在尝试使用参数化查询更新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()

我得到这个错误:typeerror:%d格式:需要一个数字,而不是str
“id”的数据类型在数据库中是int。我只提供数字。不知道为什么会抛出这样的错误。。。

kqlmhetl

kqlmhetl1#

在我的例子中,我使用的是炼金术,我在创建模型时犯了一个错误
我写道

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

相反

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

htrmnn0y2#

感谢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))

现在可以了。

nxowjjhe

nxowjjhe3#

cursor.execute("UPDATE df SET label = %s WHERE id= %d",data)

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

相关问题