写入数据库时,Python 3 中的 SQLite3 出现磁盘 I/O 错误

新手上路,请多包涵

我是一名刚开始使用 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,并且我已经使用了谷歌,但我认为我发现的任何案例都不符合我在这里尝试做的事情(或者我不具备弄清楚发生了什么的知识在)。关于我的代码,我注意到的另一件事是它以超快的速度将数据输入内存,但是当我写入 db 文件时它真的很慢,这不应该是硬件限制,因为我使用的是 SSD。任何帮助将不胜感激!

原文由 Xander Blaauw 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 983
2 个回答

将备份/同步设置为在处理存储在 Google Drive 上的项目时在系统托盘图标上暂停将防止磁盘 i/o 错误。

这是因为当文件被写入或更改时,备份和同步会尝试将新版本上传到您的 Google 云端硬盘,同时它正在执行此操作;该文件变为“只读”文件。

当同步暂停时,您的 Google 云端硬盘文件夹更像是一个普通目录。

(点击 -> 设置 -> 暂停/恢复)

原文由 Owen Easter 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道我可能真的很晚才回答,但对于其他人……我遇到了同样的问题,我发现的问题是 python 代码已经在使用该数据库。当我停止代码并再次运行主代码时,它确实起作用了……

原文由 RaPiDfire69 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题