2017-12-29 33 views
1

공급해야하는 고유 ID가있는 csv 파일에서 sqlite3에 테이블을 생성합니다. 나는 그것을 db와 그 complete를 만드는 곳으로 가지고있다. 동일한 고유 ID 값을 가진 다른 CSV 파일을 가져 오려고하지만 db에 적용하려는 정보가 추가되었습니다.고유 값의 Sqlite 업데이트 행

내가 추가하고자하는 csv 파일은 db의 많은 행에만 적용됩니다. 오전 범위의

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

에서리스트 인덱스 I이 sqlite.db하는 CSV에 행의 같은 양이 없기 때문에 점점 : IndexError : 나는 오류는 무엇입니까?

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

. 고맙습니다.

+0

그럼 얼마나 큰 이러한 CSV 파일은? MBs? GBs? –

+0

질문 해 주셔서 감사합니다. db 파일은 6,793KB이고 csv 파일은 334KB입니다. 그래서 그들은 정말로 작지만 행의 양이 다르므로 생각했습니다. –

+1

SQLite (및 대부분의 데이터베이스)는 이러한 방식으로 작동하지 않습니다. 소량의 데이터가 없어도 행이 부족하지는 않습니다. 문제가 발생한 코드의 정확한 위치를 강조 할 수 있습니까? –

답변

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

네, 이것이 문제였습니다. 해결책을 가져 주셔서 감사합니다! –