Python Sqlalchemy-如何比较表/行并识别增量?

时间:2019-06-09 03:37:47

标签: python sqlalchemy

我正在尝试比较2个表中的数据,以便我可以识别出发生了什么变化并应用必要的updateinsert

(对我而言)在数据库中执行此操作最明显的方法是外部连接两个表并以此方式标识新值或修改后的值,但是我想知道是否存在内置的SQLAlchemy功能,例如,只要有2个表就可以识别增量?

这种差异识别功能是在Python中以set表示法完美实现的。

示例“表”(集合)具有多行(元组)

table1 = {('a', 'b'), ('c', 'd')
table2 = {('a', 'DELTA'), ('c', 'd'), ('e', 'f')}
diff = table2.difference(table1)
# {('a', 'DELTA'), ('e', 'f')}

预期结果:

  1. 应将('a', 'b')中的行table1 UPDATE设为('a', 'DELTA')
  2. 将行('e', 'f') INSERT设为table1

我在core文档中看到了compare的概念,但是除了基本定义之外,我找不到任何示例或任何细节。

其他人如何使用SQLAlchemy处理此类情况?

谢谢。

1 个答案:

答案 0 :(得分:0)

SQLAlchemy支持on_conflict_do_update(),如下所示可以对您进行排序:

with testing.db.connect() as conn:
        result = conn.execute(
            insert(users).on_conflict_do_update(),
            dict(id=1, name="name1"),
        )