Sqlite更新了唯一值的行

问题描述 投票:1回答:1

我正在从csv文件创建sqlite3中的表,该文件提供了我必须使用的唯一ID。我有它到我创建数据库及其完整的地方。我正在尝试使用具有相同唯一ID值的另一个csv文件,但添加了我想要应用于db的信息。

我想添加的csv文件仅适用于db中的这么多行。我收到一个错误:IndexError:列表索引超出范围

Traceback (most recent call last):
File "test.py", line 62, in <module>
update_teams(x[0], x[2])
IndexError: list index out of range

我得到这个是因为csv到sqlite.db的行数不一样吗?

CSV格式:

Id,PlayerName,TeamName
641393,John Doe1,Team1
663844,John Doe2,Team1
607469,John Doe3,Team1

我的代码:

import csv
import sqlite3

# connect to sqlite database
conn = sqlite3.connect('players.db')
c = conn.cursor()

# table values
table_spec = """CREATE TABLE IF NOT EXISTS players(
                player_id INTEGER UNIQUE,
                name_last TEXT,
                name_first TEXT,
                TeamName TEXT);"""


# Create Table
def create_table():
  c.execute(table_spec)


# Takes values and inserts them into the table
def write_core_data(player_id, name_last, name_first):
    c.execute('INSERT OR IGNORE 
               INTO players ("player_id","name_last","name_first") 
               VALUES (?,?,?)', (player_id,name_last, name_first))
    conn.commit()


def update_teams(player_id, TeamName):
    c.execute('UPDATE players 
               SET TeamName=? 
               WHERE player_id=?',(TeamName, player_id))
    conn.commit()


# create_table()


with open('players_master.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for x in readCSV:
        write_core_data(x[0], x[1], x[2])
        print(x[0])

with open('team_list.csv') as teamlist:
    readCSV = csv.reader(teamlist, delimiter=',')
    for x in readCSV:
        update_teams(x[0], x[2])
        print("Added team {} to {}".format(x[2], x[1]))

c.close()
conn.close()

任何输入都非常感谢。谢谢

python csv sqlite
1个回答
2
投票

可能,你的cvs文件有空行或行太短。略过空行:

for x in readCSV:
    if x:
        update_teams(x[0], x[2])

你也可以断言len(x) >= 3

for x in readCSV:
    if len(x) < 3:
        print('Skipping', x)
    else: 
        update_teams(x[0], x[2])
© www.soinside.com 2019 - 2024. All rights reserved.