首页>>后端>>Python->Django触发器怎么写(django启动脚本)

Django触发器怎么写(django启动脚本)

时间:2023-12-01 本站 点击:0

今天首席CTO笔记来给各位分享关于Django触发器怎么写的相关内容,其中也会对django启动脚本进行详细介绍,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、django 中可以添加触发器吗?如果可以怎么添加呢?2、需要人帮我写一个数据库触发器,我不知道怎么写3、触发器的写法4、Django里面怎么实现数据库视图啊 就是虚拟表

django 中可以添加触发器吗?如果可以怎么添加呢?

触发器应该可以做,就如同tomcat一样。 你找一找后台执行程序的插件就可以找到多种触发器的建立办法。几年前就有这种东西了。

不过从框架上讲,触发器放在后面更好。nginx + web(djnago) + appserver, 通常触发器放在appserver里更好。 web只涉及单次请求的处理,虽然也保留会话状态,但是最好不要保留业务逻辑与状态。 这样整个数据流才更流畅,扩展性更好,也容易维护。

需要人帮我写一个数据库触发器,我不知道怎么写

CREATE TRIGGER trig_stu_update ON student

FOR UPDATE

AS

begin

end;

CREATE TRIGGER trig_stu_delete ON student

FOR DELETE

AS

begin

end;

------------------

上面是更新、删除的触发器模板,将你的代码填在begin...end之间。

触发器中经常用到的inserted,deleted。

inserted里面存放了insert、update操作的插入值或更新后值。

deleted里存放的是update、delete操作的更新前值或删除值。

使用方法:

declare @no int,@sex bit,@age int;

--insert、update取新值

select @no=no,@sex=sex,@age=age from inserted;

--delete、update删除值

select @no=no,@sex=sex,@age=age from deleted;

触发器的写法

使用触发器TRIGGER

INSERT TRIGGER

触发器是由SQL语句集组成的代码块,在响应某些动作时激活该语句集.一个触发器也可被解释为特定类型的存储过程,每当动作发生时执行该存储过程:每当基础表中数据受到数据操纵语言(DML)语句-INSERT,UPDATE,DELETE的影响时,触发器就被激发.

触发器的特征:

1. 当任何数据修改语句发出时,它被sql server自动调用

2. 在存储过程的情况下,它不能被显式地调用或执行

3. 它防止了对数据的不正确,未授权的,和不一致的改变

4. 它不能返回数据给用户

触发器语法:

CREATE TRIGGER trigger_name

ON table_name

[WITH ENCRYPTION]

FOR[INSERT | UPDATE | DELETE]

AS sql_statement

幻表:

当触发器激发对INSERT,DELETE,或UPDATE语句的响应时,两个特殊的表被创建:插入表(Inserted)和删除表(deleted),

示例:

create trigger trgInsertRequisiton

on Requistion

for insert

as

declare @VacnacyReported int

declare @ActualVacancy int

select @ActualVacancy = iBudgetedStrength - currentStrength

from Position join Inserted on

Position.cPositionCode = Inserted.cPositionCode

select @VancyReported = inserted.siNoOfVacancy

from inserted

if(@VancyReported @ActualVacancy)

begin

print'The actual vacancies are less than the vacncies'

rollback transaction

end

return

DELETE TRIGGER

1.当试图从触发器表中删除一行时,DELETE TRIGGER被触发

2.使用DELETE TRIGGER触发器来实现引用完整性约束主要有三种途径:

1.串联方法:每当从主表中删除记录时,删除依赖表中的记录

2.限制方法:如果相尖记录出现在依赖表中,则限制从主表中删除记录

3.无效方法:每当一个记录从主表中删除时,把依赖表中所指列的值变为无效

select * from publisher;

create trigger trgfordel

on publisher

for delete

as

begin

print '您删除的数据的内容为'

select * from deleted

end

delete from publisher where pub_id = 9;

UPDATE TRIGGER

当一个UPADATE触发器被激发时,它使用关于其操作的两个逻辑表-包含原始行的deleted表和存储新行的insertd表.

例一:

create trigger trgUpdatePub

on Publisher

for update

as

if update(pub_id)

begin

print 'publisher id cannot be modified'

rollback tran

end

è当用户试图修改pub_id列时它就激发,它因此阻止用户修改pub_id的内容并回滚整个事务

例二:

create trigger trgUpdateContractRecruiter

on ContractRecruiter

for update

as

declare @AvgPercentageCharge int

select @AvgPercentageCharge = avg(siPercentageCharge)

from ContractRecruiter

if(@AvgPercentageCharge 11)

begin

print 'The average cannot be more than 11'

rollback transaction

end

修改触发器语法:

alter trigger trigger_name

on table_name

[with encryption]

for[insert | delete | update]

as sql_statements

撤消触发器:

DROP TRIGGER trigger_name[,...n]

通过触发器加强数据的完整性

触发器可以用来确保和加强业务规则和数据完整性,如,只有库存中有该产品时,才可以出售,如果使用触发器,它将会对不正确的事务做检查,并确保只有有效的数据才能插入到表中.

例如:某种改变违反了引用完整性,那么所有这样的改变都被拒绝,因此所有试图改变数据库中的数据都被取消.

CREATE TRIGER trgUpdateDelete

ON TitleAuthor

FOR INSERT,UPDATE

AS

If (SELECT COUNT(*) FROM Titles t JOIN inserted i

ON t.Title_id = i.Title_Id) = 0

BEGIN

PRINT 'Invialid title ID entered'

ROLLBACK

END

IF(SELECT (COUNT(*) FROM Authors t JOIN inserted i

ON t.Au_Id = i.Au_Id) = 0

BEGIN

PRINT 'INVIALID author ID eneter'

ROLLBACK

END

多触发器:

SQL SERVER允许在给定表中定义多个触发器.这意味着单个DML语句可激活两个或多个触发器.触发器以创建次序被激活.

AFTER 和 INSTEAD OF 触发器

AFTER触发器在功能上,是在DML操作执行成功后.再执行的触发器.

如:

create triger trgDeletetitles

on Titles

AFTER DELETE

AS

PRINT 'DELETION SUCCESSFUL'

*********************************************************************

假如单个DML后有多个AFTER触发器,你可以通过使用sp_settriggerorder系统存储过程来改变这些触发器的执行次序.

sp_settriggerordertriggername,order-value,DML-operation

ordervalue = FIRST | LAST | NONEè随机顺序

DML-operation 指出创建触发器的DML操作.

sp_settriggerorder 'trgDeleteTitles' , 'FIRST', 'DELETE'

*********************************************************************

INSTEAD OF 触发器 替换的触发器

如:

create trigger trgPublisherDelete

on publishers

instead of delete

as

print 'Master records cannot be deleted!'

这种触发器在一张表上只能创建一个

不正确之处。。欢迎大家指正

Django里面怎么实现数据库视图啊 就是虚拟表

正经回答:先在数据库中建立好视图,然后django中建立对应的model。表所对应的类下面再建立一个Meta类,大致如下

class ViewModel(models.Model):

    """这个model类对应你所建立好的视图"""

    class Meta(object):

        """同理,该方法可用于使用mysql中任何已有的表,不仅是视图"""

        db_table = 'your_view' #显式指定表名,也就是你建立的视图的名字

        managed = false #默认是ture,设成false django将不会执行建表和删表操作

    # 建立字段间的映射

    #  需要注意的是,必须设一个字段为主键

    #  不然django会自动创建一个id字段为主键,引发错误

百度知道越来越辣鸡了,全是答非所问的。

结语:以上就是首席CTO笔记为大家介绍的关于Django触发器怎么写和django启动脚本的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/5631.html