使用Python脚本更新MySQL表

使用Python脚本更新MySQL表,python,mysql,Python,Mysql,我仍在学习python,我正在努力处理sql查询 我有一个简单的表,名为diverts 第1列被称为sleet 第2列称为five 滑槽是主键,包含Fa01至Fa60 | chute | five | |-------|------| | Fa01 | null | |-------|------| | Fa02 | null | |-------|------| | Fa03 | null | |-------|------| 我的脚本中有一个名为fiveMin的值列表,其中包含与该滑

我仍在学习python,我正在努力处理sql查询

我有一个简单的表,名为
diverts

第1列被称为
sleet
第2列称为
five

滑槽是主键,包含
Fa01
Fa60

| chute | five |
|-------|------|
| Fa01  | null |
|-------|------|
| Fa02  | null |
|-------|------|
| Fa03  | null |
|-------|------|
我的脚本中有一个名为
fiveMin
的值列表,其中包含与该滑槽相关的特定事件在五分钟内发生的次数。我从其他地方提取这些数据并填充列表
fiveMin=[1.0,23.0,56.0,….39.0,56.0]
60个元素

我想用该数据更新
five
列,每五分钟更新一次新数据,而不是附加它

我已经成功地使用以下方法更新了五列

cursor.executemany('INSERT INTO `ship_diverts` (five) VALUES (%s),(%s),(%s)',
[(item, item, item) for item in fiveMin])
但这只是将数据添加到
five
列中,我想根据主键更新每个列

 | chute | five |
 |-------|------|
 | Fa01  | 1.0  |
 |-------|------|
 | Fa02  | 23.0 |
 |-------|------|
 | Fa03  | 56.0 |
 |-------|------|
我不知道如何做到这一点,有什么建议吗


我还有
sleet\u list=['Fa01'、'Fa02'、..'Fa60']
,我可以将其传递到主键的查询中。

您必须使用mysql更新语句。它看起来是这样的:

UPDATE diverts
SET column1=value, column2=value2,...
WHERE chute=some_value 
您可以通过首先选择所有主键来构建对象,将它们放入一个数组中,然后在对象应该去的地方添加您想要的任何值 . 但这是总的想法

还有一个名为insert on duplicate key update的语句(如果列存在,它将更新,如果不存在,它将生成新列)

执行许多:

data = [
( 'Jane', date(2005, 2, 12) , 1),
( 'Joe', date(2006, 5, 23) , 2),
( 'John', date(2010, 10, 3) , 3),
]
stmt = "update employees set first_name = %s, hire_date = %s where id=%s"
cursor.executemany(stmt, data)

 execute:


items = [
( 'Jane', date(2005, 2, 12) , 1),
( 'Joe', date(2006, 5, 23) , 2),
( 'John', date(2010, 10, 3) , 3),
]
stmt = "update employees set first_name = %s, hire_date = %s where id=%s"
for item in items 
    cursor.execute(stmt, item)

基于此,我尝试了
cursor.executemany('updateship\u divertion SET five='%s',其中sleet='%s'%[(sleet,item)用于sleet,sleet\u列表中的item,fiveMin])
但是我得到了一个错误
ValueError:太多的值无法解包
在语句外执行循环,并且对于每个项,使用该项作为值创建一个新语句实际上刚刚看到了execute many函数,您也可以这样做,但仍然没有在语句中使用for循环。你用%s占位符写出任何常规语句,然后执行(语句,项)你的意思是像
statement=“'UPDATE diverts SET five='s%'WHERE sleet='s%'”(sleet,item)
然后
c.executemany(语句,项)
但我不确定如何执行循环来传递变量SECUECUTE many为您执行循环,如果只是使用execute,您需要执行循环我猜您是否需要执行进一步的检查或类似操作。在我的回答中,我还将举一个execute的例子。