我遇到了在python循环中更新sqlite3
行的问题。我正试图遍历每一行,并更新一个特定的列。
但是,我收到了这个错误:
sqlite3.OperationalError: no such column: row[0] (value of it)
来自我的代码中的此查询...'where currency_name = ' + row[0]
。
我认为这是一种语法错误我做错了吗?我已经尝试将其分成子语句,但这也没有奏效。我的代码如下。
import sqlite3
import requests
conn = sqlite3.connect('cryptoindex-holdings.db')
cursor = conn.cursor()
for row in conn.execute('SELECT * FROM currency'):
r = requests.get('https://api.coinmarketcap.com/v1/ticker/' + row[0] + '/?convert=CAD')
r = r.json()
market_cap = r[0]['market_cap_cad']
sql = "UPDATE currency SET market_cap = " + market_cap + " WHERE currency_name = " + row[0]
cursor.execute(sql)
conn.commit()
我的DB架构是:
currency (
currency_name TEXT,
market_cap REAL,
coin_price REAL,
coins_owned REAL
);
答案 0 :(得分:3)
您不是字符串转义WHERE
语句中的值。您的代码恰好适用于其他值,因为它们的类型为REAL
。但是,当您与currency_name
列(类型TEXT
)进行比较时,它会中断。
这是因为它认为您的字符串值(row[0]
)实际上是一列。要强制它将其识别为字符串,请更改以下行:
sql = "UPDATE currency SET market_cap = " + market_cap + " WHERE currency_name=" + row[0]
到
sql = "UPDATE currency SET market_cap = {} WHERE currency_name = '{}'".format(market_cap, row[0])
现在currency_name
值已被字符串转义,并且将被正确识别。