psqlextra/compiler.py
def _rewrite_insert_nothing(self, sql, params, returning):
        """Rewrites a formed SQL INSERT query to include
        the ON CONFLICT DO NOTHING clause."""

        # build the conflict target, the columns to watch
        # for conflicts
        conflict_target = self._build_conflict_target()

        where_clause = ' AND '.join([
            '{0} = %s'.format(self._format_field_name(field_name))
            for field_name in self.query.conflict_target
        ])

        where_clause_params = [
            self._format_field_value(field_name)
            for field_name in self.query.conflict_target
        ]

        params = params + tuple(where_clause_params)

        # this looks complicated, and it is, but it is for a reason... a normal
        # ON CONFLICT DO NOTHING doesn't return anything if the row already exists
        # so we do DO UPDATE instead that never executes to lock the row, and then
        # select from the table in case we're dealing with an existing row..
        return (
            (
                'WITH insdata AS ('
                '{insert} ON CONFLICT {conflict_target} DO UPDATE'
                ' SET {pk_column} = NULL WHERE FALSE RETURNING {returning})'
                ' SELECT * FROM insdata UNION ALL'
                ' SELECT {returning} FROM {table} WHERE {where_clause} LIMIT 1;'
            ).format(
                insert=sql,
                conflict_target=conflict_target,
                pk_column=self.qn(self.query.model._meta.pk.column),
                returning=returning,
                table=self.query.objs[0]._meta.db_table,
                where_clause=where_clause
            ),
            params
        )
def _rewrite_insert_nothing(self, sql, params, returning):
        # build the conflict target, the columns to watch
        # for conflicts
        conflict_target = self._build_conflict_target()

        where_clause = ' AND '.join([
            '{0} = %s'.format(self._format_field_name(field_name))
            for field_name in self.query.conflict_target
        ])

        where_clause_params = [
            self._format_field_value(field_name)
            for field_name in self.query.conflict_target
        ]

        params = params + tuple(where_clause_params)

        # this looks complicated, and it is, but it is for a reason... a normal
        # ON CONFLICT DO NOTHING doesn't return anything if the row already exists
        # so we do DO UPDATE instead that never executes to lock the row, and then
        # select from the table in case we're dealing with an existing row..
        return (
            (
                'WITH insdata AS ('
                '{insert} ON CONFLICT {conflict_target} DO UPDATE'
                ' SET {pk_column} = NULL WHERE FALSE RETURNING {returning})'
                ' SELECT * FROM insdata UNION ALL'
                ' SELECT {returning} FROM {table} WHERE {where_clause} LIMIT 1;'
            ).format(
                insert=sql,
                conflict_target=conflict_target,
                pk_column=self.qn(self.query.model._meta.pk.column),
                returning=returning,
                table=self.query.objs[0]._meta.db_table,
                where_clause=where_clause
            ),
            params
        )
def _rewrite_insert_nothing ( self , sql , params , returning ) : # build the conflict target, the columns to watch # for conflicts conflict_target = self . _build_conflict_target ( ) where_clause = ' AND ' . join ( [ '{0} = %s' . format ( self . _format_field_name ( field_name ) ) for field_name in self . query . conflict_target ] ) where_clause_params = [ self . _format_field_value ( field_name ) for field_name in self . query . conflict_target ] params = params + tuple ( where_clause_params ) # this looks complicated, and it is, but it is for a reason... a normal # ON CONFLICT DO NOTHING doesn't return anything if the row already exists # so we do DO UPDATE instead that never executes to lock the row, and then # select from the table in case we're dealing with an existing row.. return ( ( 'WITH insdata AS (' '{insert} ON CONFLICT {conflict_target} DO UPDATE' ' SET {pk_column} = NULL WHERE FALSE RETURNING {returning})' ' SELECT * FROM insdata UNION ALL' ' SELECT {returning} FROM {table} WHERE {where_clause} LIMIT 1;' ) . format ( insert = sql , conflict_target = conflict_target , pk_column = self . qn ( self . query . model . _meta . pk . column ) , returning = returning , table = self . query . objs [ 0 ] . _meta . db_table , where_clause = where_clause ) , params )
Rewrites a formed SQL INSERT query to include
        the ON CONFLICT DO NOTHING clause.
Rewrites a formed SQL INSERT query to include the ON CONFLICT DO NOTHING clause .