Я пытаюсь создать учебное приложение в python для работы с базой данных фильмов, добавляя детали mov ie через текстовое меню, запрашивая ввод данных для всех полей (mov ie name, актеры, компания, и др c.). Я использую PostgreSQL в качестве базы данных и импортирую psycopg2 в Python.
Исходя из пользовательского ввода, я собираю данные, которые затем хочу сохранить в своих таблицах базы данных 'movies' и 'актеры' . На один мов ie приходится несколько актеров. У меня есть этот код:
def insert_movie(name, actors, company, year):
connection = psycopg2.connect(user='postgres', password='postgres', database='movie')
cursor = connection.cursor()
query1 = "INSERT INTO movies (name, company, year) VALUES (%s, %s, %s);"
cursor.execute(query1, (name, company, year))
movie_id = cursor.fetchone[0]
print(movie_id)
query2 = 'INSERT INTO actors (last_name, first_name, actor_ordinal) VALUES (%s, %s, %s);'
for actor in actors:
cursor.execute(query2, (tuple(actor)))
rows = cursor.fetchall()
actor_id1 = [row[0] for row in rows]
actor_id2 = [row[1] for row in rows]
print(actor_id1)
print(actor_id2)
connection.commit()
connection.close()
Это прекрасно работает для печати movie_id после query1 . Однако для печати actor_id2 я получаю IndexError: список индекса выходит за пределы диапазона .
Если я оставлю только actor_id1 в query3 вот так:
query2 = 'INSERT INTO actors (last_name, first_name, actor_ordinal) VALUES (%s, %s, %s);'
for actor in actors:
cursor.execute(query2, (tuple(actor)))
rows = cursor.fetchall()
actor_id1 = [row[0] for row in rows]
print(actor_id1)
, мне распечатывается следующий результат:
movie_id --> 112
actor2_id --> 155
Проблема, которую я не могу получить actor1_id с этим кодом, который 154 .
Кто-нибудь может помочь с использованием fetchall правильно здесь?