首页 > 解决方案 > Python - 使用 for 循环更新记录

问题描述

首先为基本问题道歉,刚从 Python 开始。

我有以下代码:

import sqlite3

conn = sqlite3.connect("test.sqb")
cursor = conn.cursor()

sql = "SELECT * FROM report WHERE type LIKE 'C%'"

cursor.execute(sql)
data = cursor.fetchall()
    
for row in data:
    print (row[0])
    cursor.execute("UPDATE report SET route='ABCDE'")
    conn.commit()
conn.close()

为什么它会更新所有记录而不仅仅是来自 sql 查询的过滤记录,即使 print (row[0]) 只显示过滤记录。

非常感谢。

标签: pythonsqlite

解决方案


实际发生的是您正在为查询返回的每条记录运行此SELECT查询。

UPDATE report SET route='ABCDE'

如果您只想更新以 C 开头的route位置type,请将条件添加到UPDATE查询并执行一次。

import sqlite3

conn = sqlite3.connect("test.sqb")
cursor = conn.cursor()

sql = "SELECT * FROM report WHERE type LIKE 'C%'"

cursor.execute(sql)
data = cursor.fetchall()

cursor.execute("UPDATE report SET route='ABCDE' WHERE type LIKE 'C%'")
conn.commit()
conn.close()

推荐阅读