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.

Reply via email to