исключение sqlite3 operationalerror - PullRequest
0 голосов
/ 29 апреля 2019

В настоящее время я пытаюсь прочитать файл CSV, взять содержимое указанного файла CSV, а затем поместить их в базу данных sqlite3.Я постоянно получаю

OperationalError ('near "s": синтаксическая ошибка ")

Обычно я предполагаю, что это простая ошибкагде-то в строке кода виновника.

Интересно, однако, что программа проходит через 7 строк файла csv, прежде чем мы получим это исключение:

enter image description here

Я проверяю следующую строку в файле CSV, который вы можете увидеть здесь:

enter image description here

Насколько яМожно сказать, что здесь нет «ненормальных» значений.

Наконец, вот полный код:

def readData(filename, sqlite_file):

conn = sqlite3.connect(sqlite_file)
c = conn.cursor()

with open(filename) as CSVfile:
    csvReader = csv.reader(CSVfile)
    headers = next(csvReader)

    for row in csvReader:
        print(row[26] + ' ' + row[15] + ' ' + row[16] + ' ' + row[21] + ' ' + row[22] + ' ' + row[23] + ' ' + row[24] + ' ' + row[17])
        tableName = 'Sponsor'
        c.execute('INSERT INTO {tn}  VALUES ({v1}, {v2}, {v3}, {v4}, {v5}, {v6}, {v7}, {v8})'.format(tn=tableName, v1=row[26], v2=str("'"+ row[15] +"'"), v3="'"+ row[16] +"'", v4="'"+ row[21] +"'", v5="'"+ row[22] +"'", v6= "'"+ row[23] +"'", v7= "'"+ row[24] +"'", v8= "'"+ row[17] +"'"))

1 Ответ

1 голос
/ 29 апреля 2019

Если вы отформатируете запрос самостоятельно, вам также придется обрабатывать строковые аргументы в кавычках. Вместо этого вы можете просто позволить библиотеке sqlite выполнить за вас тяжелую работу и параметризировать ваше утверждение. Обратите внимание, что имена объектов не могут быть параметризованы, поэтому вам все равно придется форматировать имя таблицы там:

c.execute('INSERT INTO {tn}  VALUES (?, ?, ?, ?, ?, ?, ?, ?)'.format(tn=tableName),
          [row[26], row[15], row[16], row[21], row[22], row[23], row[24], row[17]])
...