python 使用sql Update 但是没有成功替换 是不是c.execute 里面的语言不能这样用一个变量表示


with open('TrackPrices.csv','rb') as csvfile:
        reader = csv.DictReader(csvfile)
        column= [row['price'] for row in reader]
    conn = sqlite3.connect('iMusic.db')
    c= conn.cursor()
    c.execute("UPDATE TRACK set UnitPrice = column")
    conn.commit()
    conn.close()

我的column是一列和UnitPrice 个数类型一样的数据 想整体替换

看起来逻辑有些模糊。
column 是一个列表吗?
还是 track表的UnitPrice 全部 update 成一个值

只有一行呀, 那还读啥CSV呀,print(column) 看看是啥内容
另外 UnitPrice 是什么类型?


 
#20321119 Yao LIN ssyyl27
from csv import reader
import csv
import sqlite3
def task1_solution():
    with open('TrackPrices.csv','r') as csvfile:
        reader = csv.DictReader(csvfile)
        column= [row['price'] for row in reader]
    print(column)
    print(type(column))
    con = sqlite3.connect('iMusic.db')
    c= con.cursor()
    c.execute("UPDATE TRACK set UnitPrice={}".format(column))
    con.commit()
    con.close()
if __name__ == '__main__':
    task1_solution()
 

对于你的需求,比较简单的方法就是读取2列,做一个数据遍历 , 逐个update。


 
#20321119 Yao LIN ssyyl27
from csv import reader
import csv
import sqlite3
def task1_solution():
    with open('TrackPrices.csv','r') as csvfile:
        reader = csv.DictReader(csvfile)
        data= [[row['trackid'],row['price']] for row in reader]    
    con = sqlite3.connect('iMusic.db')
    c= con.cursor()
    for d in data:
        sql_str = "UPDATE TRACK set UnitPrice={0} where trackid={1}".format(d[1],d[0])
        print(sql_str)
        c.execute(sql_str)
    con.commit()
    con.close()
if __name__ == '__main__':
    task1_solution()