私は使用する必要がある一意のIDを供給するcsvファイルからsqlite3にテーブルを作成しています。私はどこにそれを作成し、dbとその完全なものを作ります。同じユニークなid値を持つ別のcsvファイルを取得しようとしていますが、dbに適用したい情報が追加されています。ユニークな値のSqlite更新行
私が追加したいcsvファイルは、dbの多くの行にのみ適用されます。私はエラーを取得しています:はIndexError:行の同じ量がsqlite.dbするcsvファイルに存在しないので、範囲外のリストインデックス
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形式:
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()
任意の入力を大幅に理解されます。ありがとうございます
さてこれらのCSVファイルがどのように大きいですか? MBs? GBs? –
質問ありがとうございます。 dbファイルは6,793KB、csvファイルは334KBです。だから彼らは本当に小さいですが、私はちょうど行の量が異なることが問題であるかもしれないので考えました。 –
SQLite(およびほとんどのデータベース)はこのように動作しません。少量のデータではなく、行がなくなったわけではありません。あなたは問題が起こっているコードのどこで強調表示できますか? –