2012-03-31 13 views
0

Pythonを使用してSQLiteデータベースにcsv行を挿入するコードを作成しています。私はしばらくそれを使用してきました、そして、それは働いています。ただし、CSVファイルの更新がありましたが、列ではなく行のみが追加されました。コードを実行すると、 "TypeError:文字列の書式設定中にすべての引数が変換されるわけではありません"というメッセージが表示されます。私は考えることができ、見つけることができるすべてを試みましたが、私はまだこのエラーを取得します。これは私がそれゆえ、私はしたくない列をオフにポップするrow.popを使用する理由である29列がすべて一緒に存在し、SQLiteとPython、TypeError:文字列の書式設定中にすべての引数が変換されない

fin = open("file.csv", "rb") 
creader = csv.reader(fin, delimiter=',') 

sql_insert = "INSERT INTO WR_Training VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" 

# Iterate through creader and insert the values into the table 
# Pop off the 3 resources columns and insert the others 

    for row in creader: 
     row.pop(27) 
     row.pop(26) 
     row.pop(25) 
     if row[2] != "": 
      cu.execute(sql_insert, row) 

fin.close() 
cx.commit() 
cx.close() 

もともとデータベースの挿入部を実行するコードであり、また、テーブルの元の作成にもそれらを含めないでください。 29のうち26の列を格納しています。代わりに%sを使用しましたか?しかし、sqlコマンドの場合、%sは動作しませんでしたが、今ですか?同様に動作しません。

非常に参考になります。

はこの作品あなた

+3

のおかげでいくつかのコードを投稿しますか? – kindall

+2

'row'は' len(row) 'を見ればよいと思う列の数があることを確認しましたか?これはあなたのSQLステートメントの '? 'マーカーの数に一致しているのでしょうか? – larsks

+2

実行前に 'print(len(row))'を試してみてください。 Pythonはそれが26項目より長いことを伝えています。 – kindall

答えて

1
for row in creader: 
    row = row[0:29] 

    row.pop(27) 
    row.pop(26) 
    row.pop(25) 
    if row[2] != "": 
     cu.execute(sql_insert, row) 

ありがとう、XTLのコメント

関連する問題