因此,我从CSV中提取的数据对于EXECUTE INSERT语句来说顺序不正确,需要插入到两个不同的表中。我正在尝试使用一个元组插入到数据库中,以准确地访问每个特定的片段。例如FirstName来自行[2]等。谈到这一点,我完全是新手,我花了几天时间在这个网站和其他许多网站上研究……从CSV数据执行for循环,将其插入到使用带有元组的sqlite3的数据库中,正确的方法是什么?
目前,我收到错误:第49行,值(?,?)‘’,r[0],r[2],r[1],r[3],r[4],r[7],r[8,],r[9])类型错误:元组索引必须是整数或切片,而不是元组
以下是我当前的代码:
#!/usr/bin/python
# import modules
import sqlite3
import csv
import sys
# Get input and output names
#inFile = sys.argv[1]
#outFile = sys.argv[2]
inFile = 'mod5csv.csv'
outFile = 'test.db'
# Create DB
newdb = sqlite3.connect(str(outFile))
# If tables exist already then drop them
curs = newdb.cursor()
curs.execute('''drop table if exists courses''')
curs.execute('''drop table if exists people''')
#Create table
curs.execute('''create table people
(id text, lastname text, firstname text, email text, major text, city text, state text, zip text)''')
#curs.execute('''create table courses
# (id text, subjcode txt, coursenumber text, termcode text)''')
# Try to read in CSV
try:
reader = csv.reader(open(inFile, 'r'), delimiter = ',', quotechar='"')
except:
print("Sorry " + str(inFile) + " is not a valid CSV file.")
exit(1)
counter = 0
for row in reader:
counter += 1
if counter == 1:
continue
r = (row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9])
if counter == 5:
print(row[1])
print(counter)
#print(row[counter][2])
curs.execute('''insert into people (id,firstname,lastname,email,major,city,state,zip)
values(?,?,?,?,?,?,?,?)''',r[0],r[2],r[1],r[3],r[4],r[7],r[8,],r[9])
1条答案
按热度按时间eimct9ow1#
请注意
r[8,]
。很容易输入错误的逗号,从而将整数转换为包含该整数的1元组。如果错误是元组索引必须是整数或切片,而不是元组,并且您确定输入的是整型文字,这通常就是问题所在。在代码中添加空格可以帮助发现问题。