sql-server - DJANGO 使用 SQLSERVER 如何触发程序?
问题描述
我在大学的一个 DJANGO 项目中使用 SQLSERVER 作为数据库,我需要通过 DJANGO 触发我的触发器和程序,我一直在寻找几天来做到这一点,但我做不到,谁能帮助我?
解决方案
万一其他人最终出现在此页面上,这就是我设法做到这一点的方式……我对问题的解释是如何在数据库端对数据库触发器功能进行操作。我的数据库后端是 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 应用程序并创建一个新用户。每个新用户的 last_name 都将更改为新值。
推荐阅读
- reactjs - React Hook 在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用
- c++ - 当数组初始化为 [0] 大小时。仍然可以赋值
- java - 异常处理,RestController 建议
- javascript - 使用 setState 时如何立即获取更新状态?
- angularjs - 如果 URL 包含 x 参数,如何在 AngularJS 中设置计时器以滚动到元素 ID?
- typescript - 无法加载配置“@nuxtjs”以从
- ios - CKException 原因:应用程序缺少必需的权利 com.apple.developer.icloud-services
- c++ - 为什么QT QSqlTableModel不能正确排序中文?
- python - Python Seaborn Heatmap 格式化注释
- javascript - 数组与数据库查找