0

私が読んだことから、これは一般的なエラーです。タブ区切りのテキスト ファイルを sqlite データベースに読み込んでいます。15 列ありますが、一部の行にはデータがありません。たとえば、これは私が読んでいるテキスト ファイルの一部です。

http://www.vta.org/schedules/tdl/SC_902NO_WK.tdl

私は実際の時間を読んでいるだけです。問題は、たとえば、すべての列が時間で完全に埋められているわけではないことです。

sqlite3.ProgrammingError: 提供されたバインディングの数が正しくありません。現在のステートメントは >15 を使用しており、8 つが指定されています。

テキスト ファイル内の空の値を処理するにはどうすればよいですか?

これが私のコードです

import sqlite3 as lite
import sys
import csv
con = lite.connect('vta.db')

with con:

cur = con.cursor()
cur.execute('DROP TABLE IF EXISTS NB_902_Wkdy')
cur.execute("""CREATE TABLE NB_902_Wkdy ( Train_Num INT primary key, Winchester TEXT,            Bascom TEXT, Fruitdale TEXT, Diridon TEXT, 

コンベンションテキスト、サンタクララテキスト、シビックセンターテキスト、メトロテキスト、タスマンテキスト、オールドアイアンサイドテキスト、フェアオークステキスト、ロッキードテキスト、ウィスマンテキスト、マウンテンビューテキスト) """)

creader = csv.reader(open('NB_902_Wkdy', 'rb'), delimiter='\t')#, quotechar='|')
for t in creader:
     cur.execute('INSERT INTO NB_902_Wkdy VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', t)

creader.close()
4

1 に答える 1

0

NULL「対処」の意味を指定していませんが、欠落しているフィールドに値を挿入したいと仮定すると、t十分な値が得られるまで値を追加するだけです。

for t in creader:
    while len(t) < 15:
        t += (None,)
    cur.execute(..., t)
于 2013-02-24T10:42:46.263 に答える