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

Cách sử dụng gấu trúc để thực hiện upert trong SqlAlchemy

set_ tham số mong đợi một ánh xạ với tên cột là khóa và biểu thức hoặc ký tự dưới dạng giá trị , nhưng bạn đang chuyển một ánh xạ với các từ điển lồng nhau dưới dạng các giá trị, tức là df.to_dict(orient='dict') . Lỗi "không thể thích ứng kiểu 'dict'" là kết quả của việc SQLAlchemy chuyển các từ điển đó sang Psycopg2 dưới dạng "chữ".

Vì bạn đang cố gắng chèn nhiều hàng trong một CHÈN bằng mệnh đề VALUES, bạn nên sử dụng excluded trong các hành động SET. EXCLUDED là một bảng đặc biệt đại diện cho các hàng được chèn vào.

insert_statement = postgresql.insert(my_table).values(df.to_dict(orient='records'))
upsert_statement = insert_statement.on_conflict_do_update(
    index_elements=['id'],
    set_={c.key: c for c in insert_statement.excluded if c.key != 'id'})
conn.execute(upsert_statement)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sử dụng con trỏ phía máy chủ với django và psycopg2?

  2. Tại sao PostgreSQL không trả về giá trị null khi điều kiện là <> true

  3. Trích xuất ngày (yyyy / mm / dd) từ dấu thời gian trong PostgreSQL

  4. Nhận Id từ CHÈN có điều kiện

  5. Làm thế nào để truyền tham số cho câu lệnh sql 'in'?