cursor.fetchall() 使用 PostgreSQL 在 Python 中只带来一行

cursor.fetchall() brings only one row in Python with PostgreSQL

我正在尝试在 python 中创建一个培训应用程序来处理电影数据库,通过提示用户输入所有字段(电影名称、演员、公司等)的文本菜单添加电影详细信息。 ).我使用 PostgreSQL 作为数据库并在 Python.

中导入 psycopg2

根据用户输入,我正在收集数据,然后我想将这些数据存储在我的数据库表中 'movies''actors'。对于一部电影,有几个演员。我有这个代码:

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()

这非常适合在 query1 之后打印 movie_id。但是对于打印 actor_id2,我得到 IndexError: list index out of range.

如果我只在 query3 中留下 actor_id1,如下所示:

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 吗?

好的,我找到答案了。 fetch 应该在循环内使用,因为我们应该对每一行执行 fetch 而不是在对所有行进行整个查询之后:

query2 = 'INSERT INTO actors (last_name, first_name, actor_ordinal) VALUES (%s, %s, %s);'
actor_ids = []
for actor in actors:
    cursor.execute(query2, (tuple(actor)))
    actor_id = cursor.fetchone()[0]
    actor_ids.append(actor_id)
print(actor_ids)