Sqlalchemy Python - Как сравнить таблицы / строки и определить дельты? - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь сравнить данные в 2 таблицах, чтобы я мог определить, что изменилось, и применить необходимые update с или insert с.

Наиболее очевидный способ (для меня) сделать это в базе данных - это внешнее объединение двух таблиц и определение таким образом новых или измененных значений, но мне интересно, есть ли встроенная возможность 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 ed до ('a', 'DELTA')
  2. Строка ('e', 'f') должна быть INSERT ed до table1

Я видел концепцию сравнения , на которую есть ссылки в core документах, но я не смог найти ни примеров, ни деталей в дополнение к основному определению.

Как другие справляются с такими ситуациями, используя SQLAlchemy?

Спасибо.

1 Ответ

0 голосов
/ 09 июня 2019

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"),
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...