PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвате pandas за извършване на upsert в SqlAlchemy

set_ параметърът очаква съпоставяне с имена на колони като ключове и изрази или литерали като стойности , но вие предавате съпоставяне с вложени речници като стойности, т.е. df.to_dict(orient='dict') . Грешката „не може да адаптира тип „dict““ е резултат от това, че SQLAlchemy предава тези речници на Psycopg2 като „литерали“.

Тъй като се опитвате да вмъкнете няколко реда в единичен INSERT, като използвате клаузата VALUES, трябва да използвате excluded в действията SET. EXCLUDED е специална таблица, представяща редовете, предназначени за вмъкване.

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. Ускорете Django &Postgres с просто JSON поле

  2. Извикване на RESTful уеб услуги от процедура/функция на PostgreSQL

  3. Нито percentile_cont, нито percentile_disc изчисляват желания 75-ти процентил в PostgreSQL 9.6.3

  4. Как да актуализирам таблица от свързваща таблица?

  5. Внедрете филтър за търсене за всички колони