2017-11-28 5 views
1

私はPythonを使い始めたばかりの学生です。リレーショナルデータベース管理システムの作成を担当しました。私はかなり遠くに来たと思うが、私は壁に当たったようだ。メモリ::私は4行目が向けた入力を向けると、それを実行するとデータベースへの書き込み時にPython 3でSQLite3でディスクI/Oエラーが発生しました

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() 

:これは私のコードでそれが完璧に動作し、私は、リレーショナル・データベースと思われるものに自分を持っています。私はこのようなコードを実行しようとするとしかし、DBファイルへのデータの書き込み、私はこのエラーを取得

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を使用しているのでハードウェアの制限であってはなりません。どんな助けでも大歓迎です!

+0

NFSに書き込みますか?これを見てください:[リンク](https://stackoverflow.com/questions/29244788/error-disk-io-error-on-a-newly-created-database) –

+0

書き込み権限のような小さな問題のように見えますが、書き込みを試みます書き込み権限があるディレクトリに移動します。 – Marco

答えて

1

Googleドライブに保存されたプロジェクトで作業中にシステムトレイアイコンを一時停止するように設定すると、ディスクの入出力エラーを防ぐことができます。

これは、ファイルが書き込まれたり変更されたりすると、バックアップ中にバックアップ&が新しいバージョンをGoogleドライブにアップロードしようとしているためです。ファイルは「読み取り専用」ファイルになります。

同期が一時停止されている間、Googleドライブのフォルダは通常のディレクトリのように機能します。

(クリック - >設定 - >一時停止/再開)

-1

私のパソコンのGoogleドライブのディレクトリから作業していましたが、エラー時にオフラインになっていたため、バックアップと同期プログラムが実行されていませんでした。フォルダに対する完全なアクセス許可がまだありません。

マイドキュメントのフォルダにスクリプトと必要なファイルを移動すると、エラーが修正されました。助けてくれてありがとうMarco and Josh!

関連する問題