“ValueError:操作参数必须为str”

时间:2017-02-16 10:02:36

标签: python csv sqlite

import csv
import sqlite3

connection = sqlite3.connect('db.db')
cursor = connection.cursor()

cursor.execute('DROP TABLE IF EXISTS users')
cursor.execute('CREATE TABLE  users (Nom TEXT,Prenom TEXT,Date de naissance DATE,Fonction TEXT,Departement TEXT,Courriel TEXT,Telephone varchar(15)) ')
connection.commit()

csvfile = open('data.csv',"rt")
creader = csv.reader(csvfile, delimiter=',', quotechar='|')

t = 0
for t in creader:
    cursor.execute(('INSERT INTO users VALUES(?,?,?,?,?,?,?)', t))

csvfile.close()
connection.commit()
connection.close()

自20分钟以来,我的剧本第16行被封锁了。 这是没有评论的整个代码(Daniel)

我想使用分隔符“,”

使用for循环迭代地向我的数据库添加值

生成的错误是:

  

第16行,在cursor.execute中(('INSERT INTO用户VALUES(?,?,?,?,?,?,?)',t,))ValueError:操作参数必须是str

从csv中提取:

Nom;Prenom;Date de naissance;Fonction;Departement;Courriel;Telephone
DOE;John;10/10/1950;Directeur;Direction;john@doe.com;01 02 03 04 05

也许我的csv文件已损坏?

完整追溯:

1 个答案:

答案 0 :(得分:0)

根据你的csv exerpt,分隔符显然应该是;

此外,您始终会将标头(Nom; Prenom;...)导入数据库,也许您应该跳过csv文件的第一行。

问题出在

cursor.execute(('INSERT INTO users VALUES(?,?,?,?,?,?,?)', t))

交换双(()) - 然后一切正常。 t是字符串列表,(t)是包含一个列表的集合。