Bạn không thể nhận kết quả từ executemany
:
Chức năng này chủ yếu hữu ích cho các lệnh cập nhật cơ sở dữ liệu:bất kỳ tập hợp kết quả nào được trả về bởi truy vấn đều bị loại bỏ.
Theo tài liệu psycopg2.
Bạn sẽ tốt hơn khi lặp lại một insert
duy nhất trong một giao dịch hoặc sử dụng insert... returning
, mặc dù trong trường hợp sau, bạn phải cẩn thận đối sánh các ID được trả về bằng giá trị đầu vào khác, bạn không thể chỉ giả sử thứ tự của các ID được trả về giống với đầu vào VALUES
danh sách.
Khi tôi chạy thử nghiệm cục bộ của bạn, nó chỉ đơn giản là không thành công:
>>> import psycopg2
>>> conn = psycopg2.connect("dbname=regress")
>>> curs = conn.cursor()
>>> curs.execute("create table my_table(id serial primary key, field_1 integer, field_2 integer);")
>>> data = [(0, 0), (0, 0)]
>>> curs.executemany(
... "INSERT INTO my_table (field_1, field_2) "
... "VALUES (%s, %s) RETURNING id;",
... data
... )
>>>
>>> curs.fetchall()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
psycopg2.ProgrammingError: no results to fetch
Đã kiểm tra với psycopg2 2.5.1.