sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan bruger du pandaer til at lave upsert i SqlAlchemy

set_ parameter forventer en tilknytning med kolonnenavne som nøgler og udtryk eller bogstaver som værdier , men du sender en kortlægning med indlejrede ordbøger som værdier, dvs. df.to_dict(orient='dict') . Fejlen "kan ikke tilpasse typen 'dict'" er resultatet af, at SQLAlchemy har videregivet disse ordbøger til Psycopg2 som "bogstaver".

Fordi du forsøger at indsætte flere rækker i en enkelt INSERT ved hjælp af VALUES-sætningen, bør du bruge excluded i SET-handlingerne. EXCLUDED er en speciel tabel, der repræsenterer de rækker, der er beregnet til at blive indsat.

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. Sådan installeres Azure Data Studio på en Mac

  2. Hvordan kalder man Stored Procedures med EntityFramework?

  3. Udvikling af de nye Microsoft SQL Server ODBC- og OLEDB-drivere

  4. Oracle - Audit Trail for en bestemt bruger