Я студент, только начинающий работать с Python, и мне поручили создать систему управления реляционными базами данных. Я думаю, что продвинулся довольно далеко, но, похоже, я ударился о стену. Это мой код:
import csv
import sqlite3
conn = sqlite3.connect('unfccc.db')
c = conn.cursor()
c.execute('''CREATE TABLE unfccc (
Country TEXT,
CodeCountryFormat TEXT,
NamePollutant TEXT,
NameYearSector TEXT,
NameParent TEXT,
Sector TEXT,
CodeSector TEXT,
CNUEDSPD TEXT
)''')
def insert_row(Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD):
c.execute("INSERT INTO unfccc VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD))
conn.commit()
with open('UNFCCC_v20.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter='\t')
counter = 0
for row in readCSV:
insert_row(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7])
counter = counter+1
print('%d down, more to go' % counter)
conn.close()
когда я запускаю его со строкой 4, направляющей ввод в :memory:, он работает отлично, и у меня есть то, что я считаю реляционной базой данных.
Однако, когда я пытаюсь запустить такой код, записывая данные в файл базы данных, я получаю эту ошибку:
File "<ipython-input-13-4c50216842bc>", line 19, in insert_row
c.execute("INSERT INTO unfccc VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD))
OperationalError: disk I/O error
Я искал stackoverflow и использовал Google, но я не думаю, что какой-либо из найденных случаев соответствует тому, что я пытаюсь сделать здесь (или у меня нет знаний, чтобы понять, что происходит). на). Еще одна вещь, которую я заметил в своем коде, заключается в том, что он очень быстро вводит данные в память, но когда я пишу в файл базы данных, это происходит очень медленно, это не должно быть аппаратным ограничением, поскольку я использую SSD. Любая помощь будет оценена!