Hi, I was working on adding support for our MERGE (upsert) command (https://docs.snowflake.net/manuals/sql-reference/sql/merge.html) to snowflake-sqlalchemy.
First I tried to patch/replace the Table object to achieve an interface like ... meta = MetaData() meta.reflect(bind=session.bind, only=['source_table', 'target_table']) source_table = meta.tables['source_table'] target_table = meta.tables['target_table'] merge = source_table.merge_into(target_table).when_matched_update(...). when_not_matched_insert(...) conn.execute(merge) I tried using the compiles decorator to register my own Table object, but reflect seems to be creating the default Table object directly. Is there a way to do this, or should I be adding MERGE in another way? The other way I was thinking about doing this is similar to: https://docs.sqlalchemy.org/en/latest/core/compiler.html#compiling-sub-elements-of-a-custom-expression-construct This would yield in an interface like so: from snowflake.sqlalchemy.base import MergeInto ... merge = MergeInto(target_table, source_table, source_table.c.column == target_table.c.column) merge.when_matched_update(...) merge.when_not_matched_insert(...) conn.execute(merge) I would like stay consistent with the rest of the library. Thank you for your hard on SQLAlchemy and your comments, Mark -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
