Обновление оператора в Django ORM - PullRequest
0 голосов
/ 18 мая 2018

Как реализовать оператор SQL

update table1 
set field1 = field2

с помощью Django ORM.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Учитывая, что у вас есть режим Table1 с двумя полями, вы можете сделать это с помощью:

Table1.objects.update(field1=F('field2'))

Здесь мы используем F-expressionтак что мы ссылаемся на поле , а не на значение 'field2'.Оператор с F(..) приведет к установке всех столбцов в строку 'field2' (учитывая, конечно, что это даже возможно, поскольку field1 должен иметь возможность хранить текстовые данные).

С Table1.objects мы получаем доступ к набору запросов Table1 с (если не указано иное) всеми объектами.Обратите внимание, что мы не загружаем их в память.Он используется для построения запроса.

С помощью .update(..) мы можем затем обновить данные в строках, соответствующих набору запросов (здесь all строк, но мы могли бы также отфильтровать).

Как было сказано ранее, мы не можем просто передать 'field2' в качестве значения.Поскольку ORM интерпретирует это для установки field1 всех строк в строку 'field2'.Мы используем выражение F для ссылки на столбец.

0 голосов
/ 18 мая 2018

Вы можете использовать update() с F expression:

from django.db.models import F
Table1.objects.update(field1=F('field2'))
...