PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

nhận id của nhiều hàng được chèn vào psycopg2

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hệ thống lại khóa ngoại cho các trường

  2. Lỗi khi cố chạy pgAdmin4

  3. Định dạng ngày Postgres UTC &truyền kỷ nguyên, đảo ngược ký hiệu

  4. Sự phát triển của khả năng chịu lỗi trong PostgreSQL

  5. Postgresql Drop View