因此,我從 CSV 中提取的資料對于執行插入陳述句的順序不正確,需要插入到兩個不同的表中。我正在嘗試使用元組插入資料庫以準確訪問每個特定部分。例如 FirstName 來自 row[2] 等。在這方面我是一個完全的新手,并且花了幾天時間在這個網站和許多其他網站上進行研究......從 CSV 資料執行 For 回圈的正確方法是什么,使用帶有元組的 SQLITE3 將其插入資料庫?
目前,我收到錯誤:第 49 行,在 values(?,?,?,?,?,?,?,?)''',r[0],r[2],r[1],r[ 3],r[4],r[7],r[8,],r[9]) TypeError: 元組索引必須是整數或切片,而不是元組
這是我當前的代碼:
#!/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])
uj5u.com熱心網友回復:
注意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])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511646.html
上一篇:如何參考當前范圍?
