выполнить "вставить" необработанный SQL-запрос при конфликте "игнорировать", заменяя массовое создание в django rest framework - PullRequest
0 голосов
/ 12 декабря 2018

Это listserializer, который я использую для создания нескольких объектов.

    class listSerializer(serializers.ListSerializer):
         def create(self, validated_data):
             objs = [klass(**item) for item in validated_data]
             return klass.objects.bulk_create(objs)

Но bulk_create выдает ошибку для уникальной ошибки ключа в postgres, поэтому мне нужно выполнить этот необработанный sql в той же функции create. Мне нужносправка по переводу validated_data в sql запрос.

    insert into table (count,value,type,mark,created_at) values 
       (3,32,2,162,CURRENT_TIMESTAMP),
       (4,33,1,162,CURRENT_TIMESTAMP),
       (3,33,1,162,CURRENT_TIMESTAMP)
       on CONFLICT do nothing

1 Ответ

0 голосов
/ 12 декабря 2018
class listSerializer(serializers.ListSerializer):   
 def create(self, validated_data):

        values = ''
        for data in validated_data:
            values+='('
            for item in data.values():
                values+=str(item)+','
            values+='CURRENT_TIMESTAMP),'


        cursor = connection.cursor()
        cursor.execute("insert into table (count,value,type,mark,created_at) values "+values[:-1]+"
   on conflict do nothing)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...