2

かなり奇妙なエラーが発生しているようです。そして、私の人生では、何が悪いのか理解できません。しかし、SQLite コードの一部で、次のエラーが発生します。

Traceback (most recent call last):
  File "test.py", line 38, in <module>
    populateTables()
  File "test.py", line 20, in populateTables
    curs.execute("SELECT * FROM tracks WHERE ISRC = " + line[8])
sqlite3.OperationalError: no such column: USTCZ0993316

奇妙な点は、USTCZ0993316 が比較対象のデータであることです。なぜそれがコラムだと思われるのかわかりません。これは、同じ問題を引き起こす非常に小さなバージョンです。

import sqlite3
import csv

def tableSetup(name):
    if(name=="tracks"):
        curs.execute("CREATE TABLE tracks(id INT UNIQUE, name TINYTEXT, album_id INT, client_id INT, acr_record_num INT, ISRC TINYTEXT UNIQUE, track_length TINYTEXT, client_share FLOAT)")

def populateTables():
    tracks_csv=csv.reader(open('tables/tracks.csv', 'rU'), delimiter=";", quotechar='"')
    tracks_csv.next()
    for line in tracks_csv:
        curs.execute("SELECT * FROM tracks WHERE id = " + line[0])
        if not curs.fetchall():
            if "\"" in line[1]:
                line[1]=line[1].replace("\"","'")
            curs.execute("INSERT INTO tracks VALUES("+line[0]+",\""+line[1]+"\","+line[2]+","+line[3]+","+line[4]+",\""+line[5]+"\",\""+line[7]+"\","+line[12]+")")
    override_csv=csv.reader(open('tables/artist_override.csv', 'rU'), delimiter=",", quotechar='"')
    override_csv.next()
    for line in override_csv:
        curs.execute("SELECT * FROM tracks WHERE ISRC = " + line[8])
        print curs.fetchone()

#Set required Table Names
tables = ["tracks"]
testOut=open('tables/testOut.txt','w')
conn = sqlite3.connect('tables/test.db')

curs = conn.cursor()

# Create table if they don't already exist
curs.execute("SELECT name FROM sqlite_master WHERE type='table'")
tableResults = curs.fetchall()
print
for table in tables:
    if not any(table == result[0] for result in tableResults):
        tableSetup(table)

populateTables()
conn.commit()
curs.close()
4

1 に答える 1

13

引用符がない場合は、列または数値です。

curs.execute("SELECT * FROM tracks WHERE ISRC = ?", (line[8],))

[編集: "%s"は適切な構文ではありません。そのはず "?"。また、あなたが見下すつもりなら、少なくともそれについては正しいです。]

于 2012-08-06T00:09:10.403 に答える