如何使用元组执行sqlite3 INSERT语句,接收到TypeError:元组索引必须是整数或切片,而不是元组

afdcj2ne  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(144)

因此,我从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])
eimct9ow

eimct9ow1#

请注意r[8,]。很容易输入错误的逗号,从而将整数转换为包含该整数的1元组。如果错误是元组索引必须是整数或切片,而不是元组,并且您确定输入的是整型文字,这通常就是问题所在。
在代码中添加空格可以帮助发现问题。

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])

相关问题