set_
पैरामीटर कॉलम नामों के साथ कुंजी के रूप में मैपिंग की अपेक्षा करता है और एक्सप्रेशन या अक्षर मान के रूप में , लेकिन आप मान के रूप में नेस्टेड शब्दकोशों के साथ मैपिंग पास कर रहे हैं, अर्थात df.to_dict(orient='dict')
. त्रुटि "टाइप 'तानाशाह' को अनुकूलित नहीं कर सकती" SQLAlchemy का परिणाम है जो उन शब्दकोशों को Psycopg2 को "शाब्दिक" के रूप में पास कर रहा है।
क्योंकि आप VALUES क्लॉज का उपयोग करके एक INSERT में कई पंक्तियों को सम्मिलित करने का प्रयास कर रहे हैं, आपको excluded
SET क्रियाओं में। बहिष्कृत एक विशेष तालिका है जो सम्मिलित की जाने वाली पंक्तियों का प्रतिनिधित्व करती है।
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)