首页 文章

sqlite3.programmingerror提供的绑定数量不正确

提问于
浏览
1

Python 2.7和sqlite3

我创建一个这样的表:

#create table
connector.execute('''CREATE TABLE mytable (
column1,
column2,
column3
''')

然后我迭代一个 .csv 文件,如下所示:

with open("mycsv.csv") as f:
for i in f:
    del splitted[:]
    del myData[:]
    splitted = i.split(",")
    for j in splitted:
        myData.append(tuple([j]))

这给了我这个输出:

print myData
> [('testtext1',), ('testtext2',), ('testtext3\n',)]

但是,当我尝试将此插入我的_1419127中时,如此:

connector.executemany('''INSERT INTO mytable (
    column1,
    column2,
    column3
    ) VALUES (
    ?,?,?)''', myData)

我收到了错误

sqlite3.programmingerror提供的绑定数量不正确 . 当前状态使用3,并且tehre是1 .

1 回答

  • 1

    你拥有的是3个元组的列表,每个元组包含1个列 .

    您希望所有3列都构成1元组的内容 . 然后,您要将该元组添加到列表中 . 尝试这样的事情:

    import sqlite3
    
    con = sqlite3.connect(":memory:")
    cur = con.cursor()
    
    cur.execute('''CREATE TABLE mytable
                 (column1 text, column2 text,column3 text)''')
    
    myData = []
    with open("mycsv.csv") as f:
        for line in f.readlines():
            line = line.rstrip('\n')
            (col1, col2, col3) = line.split(',')
            mytuple = (col1, col2, col3)
            myData.append(mytuple)
    
    cur.executemany('INSERT INTO mytable (column1, column2, column3) VALUES (?,?,?)', myData)
    
    for row in cur.execute('SELECT * FROM mytable'):
        print row
    

    输出:

    (csv2sqlite)macbook:csv2sqlite joeyoung$ python csv2sqlite.py 
    (u'testtext1', u'testtext2', u'testtext3')
    (u'testtext1', u'testtext2', u'testtext3')
    (u'testtext1', u'testtext2', u'testtext3')
    

    输入:

    (csv2sqlite)macbook:csv2sqlite joeyoung$ cat mycsv.csv 
    testtext1,testtext2,testtext3
    testtext1,testtext2,testtext3
    testtext1,testtext2,testtext3
    

相关问题