2017-02-16 12 views
-1
import csv 
import sqlite3 

connection = sqlite3.connect('db.db') 
cursor = connection.cursor() 

cursor.execute('DROP TABLE IF EXISTS users') 
cursor.execute('CREATE TABLE users (Nom TEXT,Prenom TEXT,Date de naissance DATE,Fonction TEXT,Departement TEXT,Courriel TEXT,Telephone varchar(15)) ') 
connection.commit() 

csvfile = open('data.csv',"rt") 
creader = csv.reader(csvfile, delimiter=',', quotechar='|') 

t = 0 
for t in creader: 
    cursor.execute(('INSERT INTO users VALUES(?,?,?,?,?,?,?)', t)) 

csvfile.close() 
connection.commit() 
connection.close() 

私のスクリプトの16行目でブロックされています。"ValueError:操作パラメータはstrでなければなりません"

これは、生成されたエラーがある

「」私は、セパレータを使用してforループを繰り返し、私のデータベースに値を追加するコメント(ダニエル)なし

全体のコードですcsvファイルから

line 16, in cursor.execute(('INSERT INTO users VALUES(?,?,?,?,?,?,?)', t,)) ValueError: operation parameter must be str

エキス:

Nom;Prenom;Date de naissance;Fonction;Departement;Courriel;Telephone 
DOE;John;10/10/1950;Directeur;Direction;[email protected];01 02 03 04 05 

は多分私のcsvファイルが破損していますか?

完全なトレースバックは:

+0

23行目ではなく16行目のようです。実際のコードと完全なトレースバックを表示してください。 –

+0

コードとトレースバックが更新されました:) – Yass

+0

data.csvの内容の抽出も役立ちます。また、なぜ 't = 0'ですか? –

答えて

0

区切り抜粋あなたのCSVによると、明らかに;でなければなりません。

また、ヘッダー(Nom; Prenom;...)をデータベースにインポートすると、csvファイルの最初の行をスキップする必要があります。

問題はラインである

cursor.execute(('INSERT INTO users VALUES(?,?,?,?,?,?,?)', t)) 

ダブル(())を交換 - そして、すべてが正常に動作します。 tは文字列のリスト、(t)は1つのリストを含む集合です。

+0

これは問題ありません;) – Yass

+0

素敵です。 - ) –

+1

はい、もちろんです:) – Yass

関連する問題