Вывод строкового индекса за пределы диапазона при вставке в таблицу Postgresql - PullRequest
0 голосов
/ 06 марта 2019

Я новичок в python, программирую в целом и пытаюсь прочитать файл .dat и вставить данные в таблицу postgres.

Я получаю ошибку, и я погуглил, но не смог найти решение.Надеясь, что кто-то может указать мне правильное направление.

Таблица рейтингов:

UserID int
MovieID int
Rating float

Ratings.dat:

1::122::5::838985046

1::185::5::838983525

Ниже мой код:

import psycopg2


ratingsfile = open('ml-10M100K/ratings.dat', 'r')
for line in ratingsfile:
    items = line.split('::')
    for values in items:
    curr.execute("INSERT INTO Ratings(UserID, MovieID, Rating)
      VALUES (%s, %s, %s)", values) 

conn.commit()
ratingsfile.close()

Ошибка:

curr.execute("INSERT INTO Ratings(UserID, MovieID, Rating)
VALUES (%s, %s, %s)", values) 

IndexError: string index out of range

1 Ответ

0 голосов
/ 06 марта 2019

Вам не нужно перебирать items.Вместо этого вы можете назначить 3 %s переменные как items[index] следующим образом:

import psycopg2


ratingsfile = open('ml-10M100K/ratings.dat', 'r')
for line in ratingsfile:
    items = line.split('::')
    curr.execute("INSERT INTO Ratings(UserID, MovieID, Rating) VALUES (%s, %s, %s)" % (items[0], items[1], items[2]))

conn.commit()
ratingsfile.close()

Это предполагает, что, например, в вашем примере Ratings.dat, что UserID равен 1 (items[0]), MovieID122 и 185 (items[1]), а рейтинг 5 (items[2]).9-значные целые числа в конце каждой строки доступны с помощью items[3]

...