2010-10-31 31 views
2

我正在使用Django使用MySQL数据库进行Web服务。客户端通过由Django处理的URL与我们的数据库进行交互。现在我试图创建一个行为,每当某个表被修改时自动执行一些检查/日志记录,这自然意味着MySQL触发器。不过,我也可以在Django中执行表修改的请求处理程序。我不认为Django已经触发了支持,所以我不确定哪个更好,通过Django代码或MySQL触发器来完成。Django代码或MySQL触发器

任何具有这些选项性能知识的人都会关注点什么?提前致谢!

回答

0

您所描述的内容听起来像是“更改数据捕获”给我的。

我觉得权衡可能是这样的:

  1. Django的优点:中间层的代码可以被多个应用程序共享;如果数据库改变
  2. Django的缺点便携式:按道理不是业务交易的一部分
  3. MySQL优势:自然做在一个数据库中
  4. MySQL的缺点:触发器是非常数据库特定的;如果你改变供应商,你必须重写

This可能会有所帮助。

6

有很多的方法来解决你所描述的问题:

  • 应用逻辑
    • 具体查看逻辑 - 如果该行为是特定于单个查看,然后将更改放入视图中。
    • 特定于模型的逻辑 - 如果行为特定于单个模型,则该模型为override the save() method
  • 中间件逻辑 - 如果该问题涉及到多个模型或需要缠现有的应用程序,你可以使用Django的pre-save/post-save signals添加额外的行为而无需改变应用程序本身。
  • 数据库存储过程 - 通常情况下是可能的,但Django的ORM不使用它们。不可跨数据库移植。
  • 数据库触发器 - 不能从一个数据库移植到另一个数据库(或者甚至是一个数据库的一个版本),但允许您跨多个(可能是非Django)应用程序控制共享行为。

就个人而言,我更喜欢使用覆盖save()方法或使用Django信号。使用特定于视图的逻辑可以在大型应用程序中捕捉到具有相同模型的多个视图。

+1

随着我自己的应用程序,我一直这样做,因为代码最终以易于理解的格式在模型旁边结束。信号非常适合第三方/ django核心事件。 – 2010-10-31 04:33:49