SQLITE3错误列名称的WHERE语句

时间:2017-06-01 14:00:10

标签: python sqlite

我遇到了在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
);

1 个答案:

答案 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值已被字符串转义,并且将被正确识别。