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

Posted

技术标签:

【中文标题】sqlite 和 python 错误-提供的绑定数量不正确【英文标题】:Error with sqlite and python-Incorrect number of bindings supplied 【发布时间】:2013-02-09 12:36:20 【问题描述】:

根据我的阅读,这是一个常见错误——我正在将制表符分隔的文本文件读入 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】:

您尚未指定“处理”的含义,但假设您要将 NULL 值插入缺失的字段,您只需将它们附加到 t 直到您有足够的值:

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

【讨论】:

以上是关于sqlite 和 python 错误-提供的绑定数量不正确的主要内容,如果未能解决你的问题,请参考以下文章

Python 3 SQLite3 - 绑定数量不正确

Python函数中的嵌入式SQL(SQLite)提供错误的输出

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 74 个

SQLite 中的语法错误(C 绑定)

sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个

错误:找不到绑定文件 better-sqlite3.node