DJANGO使用SQLSERVER如何触发程序?

时间:2018-05-14 23:54:32

标签: sql-server django stored-procedures triggers

我在大学的DJANGO项目中使用SQLSERVER作为数据库,我需要通过DJANGO触发我的触发器和程序,我已经找了几天这样做而我不能,有谁可以帮助我?

3 个答案:

答案 0 :(得分:0)

稍微偏离主题建议,所以请原谅我。

为什么不使用Flask。 Django的力量主要在其框架内运作。使用models.py构建数据库。您可以通过框架执行迁移,并将其用于使用自定义中间件或信号的数据操作。

如果你有一个数据库已经为你做了很多繁重的工作,那么用更少的电池工作可能会更容易。#34;像Django这样的框架并使用烧瓶或瓶子。如果它不适用于不需要企业功能或稳定性的大学项目,那将尤其如此。通过一些不太明确的框架可能更容易破解和削减。如果它在学期结束时,学习Django可能是一个很高的命令。

答案 1 :(得分:0)

我只是要回答这个问题,但是可以从经验告诉你,你可能会走向一些远离最佳做法的道路。如果这将成为一个永久性项目,你可能想要进行更多的挖掘;如果它是一个学习练习,那也很酷!

回答:Django是用Python编写的。您可以使用pyodbc从Python触发SQL Server中的存储过程。要将SQL Server与Django的ORM一起使用,您将要使用Django引擎,例如django-pyodbc-azure(与pip install django-pyodbc-azure一起安装),它也将安装pyodbc。如果您在Linux或Mac上运行Django,您还需要一个兼容SQL Server的ODBC驱动程序,例如MS ODBC驱动程序或FreeTDS(有关在Linux上安装驱动程序的最新详细信息:{ {3}})

祝你好运。

答案 2 :(得分:0)

万一其他人最终出现在此页面上,这就是我设法做到的...我对问题的解释是如何对数据库端的数据库触发函数执行操作。我的数据库后端是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终端以进行调试。您可以通过在其前面添加一个双破折号来注释掉它们,例如{{1} }):

--RAISE NOTICE 'id = % ', NEW.id;

现在,您需要将函数绑定到表。为此的SQL查询是这样的:

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;

现在加载django应用并创建一个新用户。每个新用户的last_name将更改为新值。