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.