Вывод индекса строки из диапазона при вставке в таблицу Postgresql

#python #postgresql #psycopg2

#python #postgresql #psycopg2

Вопрос:

Я новичок в 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:

Вам не нужно выполнять итерации 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 идентификатор пользователя равен 1 ( items[0] ), идентификатор фильма равен 122 и 185 ( items[1] ), а рейтинг равен 5 ( items[2] ). Доступ к 9-значным целым числам в конце каждой строки можно получить с помощью items[3]

Комментарии:

1. Ага, вот и все! Спасибо!