Ошибка при заполнении таблицы SQLite данными из CSV файла
import sqlite3
import csv
connection = sqlite3.connect('DBname.db')
cursor = connection.cursor()
table = cursor.execute("""CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT,
first_name TEXT,
last_name TEXT,
Patronymic TEXT,
Birth_Date TEXT,
login TEXT,
snls TEXT,
email TEXT,
phone TEXT
)""")
connection.commit()
with open('CSVname.csv', encoding='utf-8') as file:
csv.field_size_limit(10**8)
for line in csv.reader(file, delimiter=' '):
try:
cursor.execute(f"INSERT INTO users(first_name, last_name, Patronymic, Birth_Date, login, snls, email, phone) VALUES('{line[4]}','{line[5]}','{line[6]}','{line[7]}','{line[26]}','{line[40]}','{line[57]}','{line[58]}')")
except sqlite3.OperationalError:
connection.commit()
connection.commit()
connection.close()
Ошибка:
Traceback (most recent call last):
File "d:\DB\convert.py", line 25, in <module>
cursor.execute(f"INSERT INTO users(first_name, last_name, Patronymic, Birth_Date, login, snls, email, phone) VALUES('{line[4]}','{line[5]}','{line[6]}','{line[7]}','{line[26]}','{line[40]}','{line[57]}','{line[58]}')")
IndexError: list index out of range
В моей CSV таблице 62 столбца, в каждом из них содержаться данные.
UPD: Пример line
['4762046\[email protected]\t\\N\t\\N\tВладимир\tСергеевич\tГерасимов\t2007-05-02\t9263500749\t\\N\t\\N\t\\N\t2017-06-15', '23:31:12.939266\t2021-08-29', '01:23:53.830237\t\t\\N\t\\N\t\\N\t1\t0\t\\N\t\\N\t\\N\t\\N\t\\N\t\\N\tgerasimovvs-9\t2179138\t11ce10b5-699f-4737-bbf1-e9ed3d44e312_nsi3\t\\N\t\\N\t\\N\t\\N\tf\t\\N\t\\N\t\\N\t{}\tf\t\\N\t183-662-944', '05\t\\N\t\\N\t\\N\t\\N\tf\tf\tf\tf\t\\N\t\\N\t\\N\t\\N\t\\N\t\\N\t36212074\t\\N\[email protected]\t79263500749\t919300\t11ce10b5-699f-4737-bbf1-e9ed3d44e312\t\\N']
Ответы (1 шт):
Автор решения: Caxa
→ Ссылка
Проблема была в разделителе.
Если открывать CSV файл в редакторе то он разделён пробелами, а если посмотреть в переменную line то там появляются \t в качестве разделителя.
Что бы все работало корректно достаточно при открытие файла указать delimiter='\t'