DJANGO с использованием SQLSERVER, как я могу запустить процедуры? - PullRequest
0 голосов
/ 15 мая 2018

Я использую SQLSERVER в качестве базы данных в проекте DJANGO в колледже, и мне нужно запускать свои триггеры и процедуры через DJANGO, я искал несколько дней, чтобы сделать это, и я не могу, кто-нибудь может мне помочь

Ответы [ 3 ]

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

Я просто собираюсь ответить на вопрос, но могу сказать вам по опыту, вы, вероятно, идете по пути, который далек от того, что считалось бы наилучшей практикой. Возможно, вы захотите немного больше копать, если это станет постоянным проектом; если это учебное упражнение, это тоже круто!

На ответ: Django написан на Python. Вы можете запускать хранимые процедуры в SQL Server из Python, используя pyodbc. Чтобы использовать SQL Server с ORM в Django, вам нужно использовать движок Django, такой как django-pyodbc-azure (установить с pip install django-pyodbc-azure), который также установит pyodbc. Если вы используете Django в Linux или Mac, вам также потребуется драйвер ODBC, совместимый с SQL Server, такой как драйвер MS ODBC или FreeTDS (для получения последних сведений об установке драйверов в Linux: https://pyphilly.org/django-and-sql-server-2018-edition/)

Удачи.

0 голосов
/ 19 июня 2019

В случае, если кто-то еще попадет на эту страницу, вот как мне удалось это сделать ... моя интерпретация вопроса заключается в том, как выполнить действия с триггерными функциями базы данных на конце базы данных.Моя база данных - PostgreSQL, но SQL является стандартом, запросы для MySQL и других должны быть примерно одинаковыми).

Решение относительно простое.Как только вы выполните свой первый

python manage.py makemigrations
python manage.py migrate

, перейдите к выбранному вами менеджеру базы данных и найдите SQL-запрос, сгенерировавший таблицу, для которой вы хотите иметь свой триггер.

Например,Ваш запрос на создание таблицы public.auth.users может выглядеть следующим образом:

CREATE TABLE public.auth_user
(
    id integer NOT NULL DEFAULT nextval('auth_user_id_seq'::regclass),
    password character varying(128) COLLATE pg_catalog."default" NOT NULL,
    last_login timestamp with time zone,
    is_superuser boolean NOT NULL,
    username character varying(150) COLLATE pg_catalog."default" NOT NULL,
    first_name character varying(30) COLLATE pg_catalog."default" NOT NULL,
    last_name character varying(150) COLLATE pg_catalog."default" NOT NULL,
    email character varying(254) COLLATE pg_catalog."default" NOT NULL,
    is_staff boolean NOT NULL,
    is_active boolean NOT NULL,
    date_joined timestamp with time zone NOT NULL,
    CONSTRAINT auth_user_pkey PRIMARY KEY (id),
    CONSTRAINT auth_user_username_key UNIQUE (username)

)
WITH (
    OIDS = FALSE
)
TABLESPACE pg_default;

Допустим, вы хотите иметь триггер для изменения last_name каждой новой записи на значение "Trump" (без кавычек).Код для создания вашей триггерной функции будет выглядеть следующим образом (примечание: строки RAISE NOTICE просто выводят информацию в терминал SQL для отладки. Вы можете закомментировать их, добавив перед ними двойную черту, например --RAISE NOTICE 'id = % ', NEW.id;):

CREATE OR REPLACE FUNCTION trumpisizer() RETURNS trigger AS $$
BEGIN
        RAISE NOTICE 'last_name = % ', NEW.last_name;
        NEW.last_name = 'Trump';
        RAISE NOTICE 'last_name = % ', NEW.last_name;
        RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Теперь вам нужно привязать свою функцию к вашему столу.Этот запрос SQL для этого:

CREATE TRIGGER trumpist BEFORE INSERT ON auth_user FOR EACH ROW EXECUTE PROCEDURE trumpisizer();

Теперь загрузите ваше приложение django и создайте нового пользователя.Фамилия каждого нового пользователя будет изменена на новое значение.

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

Немного не по теме, поэтому, пожалуйста, прости меня.

Почему бы не использовать Flask. Сила Джанго в основном работает в его рамках. Вы создаете свою базу данных с models.py. Вы выполняете миграцию через платформу и используете ее для операций с данными с пользовательским промежуточным программным обеспечением или сигналами.

Если у вас есть база данных, которая уже выполняет большую часть тяжелой работы за вас, тогда может быть проще работать с меньшим количеством «включенных батарей», таких как Django, и использовать колбу или бутылку. Это было бы особенно верно, если бы это было для проекта колледжа, где он не требует корпоративных функций или стабильности. Может быть проще взломать и пробить менее четко определенные рамки. Если это ближе к концу семестра, изучение Джанго может быть непростым делом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...