У меня есть список словарей, которые я хотел бы сравнить с таблицей, использующей Sqlalchemy.
Я ищу эффективное решение для сравнения таким образом, чтобы я мог разделить результаты на 3 группы:
- Те, кто в таблице, а не список, который будет удален
- Те, что в таблице и в списке будут обновляться
- Те из списка, но не таблица, которую нужно добавить
Вот варианты, на которые я смотрел, но не думаю, что они оптимальны:
Выполните запрос для каждого элемента в списке, обновите / добавьте, где необходимо, затем выполните отрицательный запрос для всех элементов в таблице, а не для списка, который нужно удалить.
Запросите все в таблице, а затем некоторую реализацию "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, бар добавляется в таблицу и удаляется далеко.