sqlite和python错误 - 提供的绑定数量不正确

0 投票
1 回答
520 浏览
提问于 2025-04-17 16:55

根据我所了解,这个错误是很常见的。我正在把一个用制表符分隔的文本文件读入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, 

Convention TEXT, Santa_Clara TEXT, Civic_Center TEXT, Metro TEXT, Tasman TEXT, Old_Ironsides TEXT, Fair_Oaks TEXT, Lockheed TEXT, Whisman TEXT, Mountain_View 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()

1 个回答

0

你没有说明“处理”是什么意思,但假设你是想在缺失的字段里插入 NULL 值,那么你只需要把它们加到 t 里,直到你有足够的值为止:

for t in creader:
    while len(t) < 15:
        t += (None,)
    cur.execute(..., t)

撰写回答