数据库upd上的触发器Django模块

2024-09-30 22:14:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想开发一个应用程序来监视数据库中的新记录,并允许我在插入新记录时在Django应用程序的上下文中执行一个方法。在

我计划使用一种方法,在这种方法中,芹菜任务检查数据库中自上次检查以来的更改,并触发上述方法。在

有没有更好的方法来实现这一点?在

我使用SQLite作为后端,并尝试了apsw的setupdatehook API,但它似乎没有在Django上下文中运行我的模块。在

注意:这些更新是由Django外部的另一个应用程序进行的。在


Tags: 模块django方法api数据库应用程序sqlite记录
2条回答

更好的方法是让修改记录的应用程序调用您的。或者至少创建一个芹菜队列条目,这样您就不必经常查询数据库来查看是否发生了变化。在

但是如果这不是一个选择,那么让celery查询数据库以确定是否发生了变化可能是下一个最佳选择。(当然比从数据库调用web服务作为触发器的另一个可能的选项要好,您应该真正避免这一点。)

创建一个芹菜任务来执行您需要对对象执行的任何操作:

任务.py

from celery.decorators import task

@task()
def foo(object):
    object.do_some_calculation()        

然后创建一个django signal,每次保存模型的实例时都会激发该实例,将任务放入芹菜中排队:

模型.py

^{pr2}$

需要注意的是,django的信号是同步的,换句话说,queue_task函数在请求周期内运行,但是queue_task函数所做的就是告诉Celery在B后台处理实际的工作内容(do_some_calculation

相关问题 更多 >