代码改变世界

django mongodb 使用信号量 post_save举例

2019-12-02 15:46  AIF  阅读(536)  评论(0编辑  收藏  举报

问题:项目里操作记录表(mongodb)非常大,现在需要结合这个表进行一些业务统计,要求在插入记录时进行分析。

解决方法:利用信号量,定义insert和create时调用。 参考:  https://blog.csdn.net/sun754276603/article/details/49180661

eg:

from mongoengine import signals
 
class UploadRecord(Document):
    shop_id = IntField(verbose_name="店铺ID", required=True)
    campaign_id = IntField(verbose_name="计划ID")
    ... 字段定义......
 
    @classmethod
    def post_bulk_insert(cls, *args, **kwargs):
        """当批量插入到操作记录表后,执行处理,对应的方法eg:UploadRecord.objects.insert(rcd_list)"""
        print "post_bulk_insert: %s" % ("*" * 30)
        document_list = kwargs.get('documents', [])
        for doc in document_list:
            print doc.shop_id, doc.item_name, len(doc.detail_list)
 
    @classmethod
    def post_save(cls, sender, document, **kwargs):
        """当保存数据时到操作记录表时,执行处理,对应的方法eg: UploadRecord.objects.create(**rcd_dict)"""
        print "Post Save: %s" % ("1" * 30)
        print document.shop_id, document.item_name, len(document.detail_list)
 
 
# 定义信号量,当mongodb的数据发生改变时执行方法
signals.post_bulk_insert.connect(UploadRecord.post_bulk_insert, sender=UploadRecord)
signals.post_save.connect(UploadRecord.post_save, sender=UploadRecord)