IndexError: индекс кортежа вне диапазона, соединяющий Python с PostgreSQL - PullRequest
0 голосов
/ 14 апреля 2019

Я знаю, что этот вопрос задавался несколько раз, но я застрял здесь, не в состоянии продолжить.Я выполняю цикл for в python для загрузки данных в таблицу фактов.

Я выполняю приведенный ниже код

for index, row in df.iterrows():

# get songid and artistid from song and artist tables
cur.execute(song_select, (row.song, row.artist, row.length))
results = cur.fetchone()

if results:
    song_id, artist_id = results
else:
    song_id, artist_id = None, None

# insert songplay record

songplay_data = (pd.to_datetime(row.ts, unit='ms'),row.userId,row.level,song_id,artist_id,row.sessionId,row.location,row.userAgent)
cur.execute(songplay_table_insert, songplay_data)
conn.commit()

и получаю ошибку

<ipython-input-22-b8b0e27022de> in <module>()
 13 
 14     songplay_data = (pd.to_datetime(row.ts, unit='ms'),row.userId,row.level,song_id,artist_id,row.sessionId,row.location,row.userAgent)
 15     cur.execute(songplay_table_insert, songplay_data)
 16     conn.commit()
 IndexError: tuple index out of range

MyТаблица, которую я пытаюсь вставить,

songplay_table_insert = ("""INSERT INTO songplays (songplay_id, start_time, 
user_id, level, song_id, artist_id, session_id, location, user_agent )
VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s)

Я действительно застрял, любая помощь приветствуется.

1 Ответ

1 голос
/ 14 апреля 2019

У вас слишком много %s маркеров.

VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s)

имеет 9 маркеров, а

songplay_data = (pd.to_datetime(row.ts, unit='ms'),row.userId,row.level,song_id,artist_id,row.sessionId,row.location,row.userAgent)

имеет 8 элементов. Когда он пытается оценить последний маркер, он ищет 9-й элемент, то есть songplay_data[8], и это вызывает ошибку.

Вам также необходимо удалить songplay_id из SQL, чтобы сделать оператор INSERT действительным. База данных должна генерировать первичный ключ для вас, если у вас нет значения, чтобы предоставить, если нет, мы должны взглянуть на определение вашей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...