Sqlalchemy сравнить список с запросом, чтобы обновить, удалить и добавить - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть список словарей, которые я хотел бы сравнить с таблицей, использующей Sqlalchemy.

Я ищу эффективное решение для сравнения таким образом, чтобы я мог разделить результаты на 3 группы:

  • Те, кто в таблице, а не список, который будет удален
  • Те, что в таблице и в списке будут обновляться
  • Те из списка, но не таблица, которую нужно добавить

Вот варианты, на которые я смотрел, но не думаю, что они оптимальны:

  1. Выполните запрос для каждого элемента в списке, обновите / добавьте, где необходимо, затем выполните отрицательный запрос для всех элементов в таблице, а не для списка, который нужно удалить.

  2. Запросите все в таблице, а затем некоторую реализацию "set (query) & set (list)", чтобы создать список соответствия, удалить элементы в списке соответствия из исходного списка и запросить, чтобы создать добавление и удаление. список соответственно, используйте этот список для обновления / добавления / удаления

class Widgets(model):
    name = Column(String)
    quantity = Column(Integer)
|----------------|------------------|
|      name      |     quantity     |
|----------------|------------------|
|      foo       |        2         |
|----------------|------------------|
|      far       |        4         |
|----------------|------------------|
list = [
    {'name': 'foo', 'quantity': 3 },
    {'name': 'bar', 'quantity': 7 }
]

Используя приведенный выше пример, foo имеет обновленное количество 3, бар добавляется в таблицу и удаляется далеко.

1 Ответ

0 голосов
/ 15 апреля 2019

вот как я буду это обрабатывать:

Элементы для удаления: select element from TABLE where element not in (list_from_dict)

Элементы для обновления: select element from TABLE where element in (list_from_dict)

Элементы для добавления: list_from_dict- result of the select for elements to update

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...