Postgres触发器支持与Django模型集成。

django-pgtrigger的Python项目详细描述


django-pgtrigger提供用于配置的原语 Postgres triggers 在Django模型上。在

触发器可以解决 各种各样的数据库级问题更加优雅可靠 而不是Django的应用程序级别。这里有一些常见的 可以用触发器解决的问题,其中许多问题我们稍后将演示如何 在文档中求解:

  1. 保护更新和删除或行或列(pgtrigger.Protect)。在
  2. 通过将字段设置为delete时的值(pgtrigger.SoftDelete)来软删除模型。在
  3. 跟踪对模型或列的更改,或在特定条件更改时 发生(django-pghistory使用django-pgtrigger执行此操作)。在
  4. 保持字段与其他字段同步。在
  5. 确保工程师使用官方界面 (例如,工程师必须使用User.objects.create_user,而不是 User.objects.create)。在
  6. 只允许模型的状态字段通过 状态(pgtrigger.FSM)。在

快速入门

pip install django-pgtriggerpip install django-pgtrigger安装django-pgtriggerpgtrigger添加到settings.INSTALLED_APPS。在

模型用@pgtrigger.register装饰并提供 pgtrigger.Trigger对象。如果您无法访问模型定义, 您仍然可以通过编程方式调用pgtrigger.register。在

用户手动声明plpgsql代码 在pgtrigger.Trigger对象中,或可以在中使用派生触发器 django-pgtrigger,实现常见方案。例如, pgtrigger.Protect可以保护模型上的操作,例如删除:

fromdjango.dbimportmodelsimportpgtrigger@pgtrigger.register(pgtrigger.Protect(operation=pgtrigger.Delete))classCannotBeDeletedModel(models.Model):"""This model cannot be deleted!"""

django-pgtrigger旨在减轻触发器和 必须使用常见的Django习惯用法编写原始SQL。例如,用户 可以使用pgtrigger.Qpgtrigger.F对象来 基于OLDNEW行有条件地执行触发器 正在修改。例如,我们只保护删除 相对于模型的“活动”行:

^{pr2}$

组合使用pgtrigger.Qpgtrigger.F,和派生的pgtrigger.Trigger 对象可以解决大量的Django问题,而不必这样做 编写原始SQL。但是,用户仍然可以自定义 触发器,并为它们的用例编写尽可能多的原始SQL。在

教程

完成django-pgtrigger和所有派生的 触发器(连同触发器食谱!),阅读 pgtrigger docs。文件 有一个完整的教程如何配置触发器和大量的代码示例。在

在你经历了 文档中的教程,请查看 https://wesleykendall.github.io/django-pgtrigger-tutorial/,哪个 是为Django meetup谈话编写的交互式教程吗 django-pgtrigger。在

安装

安装django pgtrigger:

pip3 install django-pgtrigger

在此之后,将pgtrigger添加到INSTALLED_APPS 你的Django项目的设置。在

投稿指南

有关为开发和 正在参与更改,请查看CONTRIBUTING.rst。在

主要作者

  • @卫斯肯德尔

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JFrame中的Java多线程   java Servlet异常映射   java无法从输出流读取   swing Java带来的小程序GUI问题   java什么原因导致错误“'void'类型此处不允许”以及如何修复它?   Java选择器select(长)与selectNow的区别   java自定义arraylist<mygames>获得不同   java Icepdf注释让页面消失   java反向整数数组   java I在生成同步“无法解析配置的所有依赖项”时遇到此错误:app:debugRuntimeClasspath   多个虚拟机上的java线程访问单个DB实例上的表,有时会导致性能低下和异常   swing更改Java中的默认按钮,使其看起来“更好”   java慢速MQ主题订阅。并行化不能提高性能   java运行Boggle Solver需要一个多小时。我的代码怎么了?   数据库中的java循环与应用程序中的java循环   正则表达式匹配${123…456}并在Java中提取2个数字?   java如何制作我们软件的试用版   Java内存参数计算   从另一个类调用方法时出现java问题