Sqlfuction в метод django

У меня есть эта функция postgresql. Могу ли я преобразовать эту функцию в django-метод?

Я реализовал эти функции в sql, но я хотел бы реализовать эти функции так, чтобы их можно было использовать в django или могу я спросить, есть ли способ использовать функцию raw-query отдельно в django?

CREATE EXTENSION IF NOT EXISTS "pgcrypto";

DO $$ BEGIN
  CREATE DOMAIN SHORTKEY as varchar(11);
EXCEPTION
  WHEN duplicate_object THEN null;
END $$;

CREATE OR REPLACE FUNCTION shortkey_generate()
RETURNS TRIGGER AS $$
DECLARE
  gkey TEXT;
  key SHORTKEY;
  qry TEXT;
  found TEXT;
  user_id BOOLEAN;
BEGIN
  qry := 'SELECT id FROM ' || quote_ident(TG_TABLE_NAME) || ' WHERE id=';

LOOP

IF NEW.id IS NOT NULL THEN
  key := NEW.company_id;
  user_id := TRUE;

  IF length(key) <> 11 THEN
    RAISE 'User defined key value % has invalid length. Expected 11, got %.', key, 
length(key);
  END IF;
ELSE
  gkey := encode(gen_random_bytes(8), 'base64');
  gkey := replace(gkey, '/', '_');  -- url safe replacement
  gkey := replace(gkey, '+', '-');  -- url safe replacement
  key := rtrim(gkey, '=');          -- cut off padding
  user_id := FALSE;
END IF;

EXECUTE qry || quote_literal(key) INTO found;


IF found IS NULL THEN
  EXIT;
END IF;

IF user_id THEN
  RAISE 'ID % already exists in table %', key, TG_TABLE_NAME;
END IF;

END LOOP;

NEW.id = key;

RETURN NEW;
END
$$ language 'plpgsql';

Вы можете выполнять SQL-команды на объектах следующим образом:

MyModel.objects.raw(
"""
    SQL-COMMANDS
"""
)

В файлах миграции вы можете выполнить:

migrations.RunSQL(
   """
       SQL-COMMANDS
   """
)

Но обычно это не рекомендуется делать. Я бы рекомендовал преобразовать этот SQL-скрипт в код Python/Django.

Вернуться на верх