sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man använder pandor för att göra upsert i SqlAlchemy

set_ parametern förväntar sig en mappning med kolumnnamn som nycklar och uttryck eller bokstaver som värden , men du skickar en mappning med kapslade ordböcker som värden, t.ex. df.to_dict(orient='dict') . Felet "kan inte anpassa typ 'dict'" är resultatet av att SQLAlchemy skickade dessa ordböcker till Psycopg2 som "literals".

Eftersom du försöker infoga flera rader i en enda INSERT med hjälp av VALUES-satsen, bör du använda excluded i SET-åtgärderna. EXCLUDED är en speciell tabell som representerar raderna som är avsedda att infogas.

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. Hashing med krypto i PHP

  2. Hur konverterar man FeatureCollection till GeometryCollection eller MultiPolygon?

  3. Oracle CREATE TABLE-kommando i PL/SQL med 10 exempel

  4. Hur förhindrar jag sql-injektion med php och mysql