Maison  >  Questions et réponses  >  le corps du texte

python - flask sqlalchemy signals 无法触发

在我得蓝图当中我定义了 一个接受者

# -*- coding: utf-8 -*-

from flask_sqlalchemy import models_committed


# flag = True
# if flag:
def on_models_committed(sender, changes):
    print u'我是订阅者,我要触发任务'
    for obj, change in changes:
        if change == 'insert' and hasattr(obj, '__commit_insert__'):
            obj.__commit_insert__()
        elif change == 'update' and hasattr(obj, '__commit_update__'):
            obj.__commit_update__()
        elif change == 'delete' and hasattr(obj, '__commit_delete__'):
            obj.__commit_delete__()


models_committed.connect(on_models_committed)

然后哦在create_app 当中的__init__.py 导入了我蓝图中的这个方法

在models.py 中定义了__commit_update__()方法来执行处理逻辑

但是现在信号无法触发,求问哪里出错了?

怪我咯怪我咯2741 Il y a quelques jours481

répondre à tous(1)je répondrai

  • 阿神

    阿神2017-04-18 10:30:53

    问题解决方式
    db.session.query(ClassModel).filter(
                ClassModel.id == ids).delete()
    修改成
    db.session.query(ClassModel).filter(
                ClassModel.id == ids).first().delete()
    
    classModel(db.Model):
        .....
        
        def delete(self):
            db.session.delete(self)
            db.session.commit()

    Avec les modifications ci-dessus, le déclenchement du signal peut être capturé correctement, mais je ne sais pas quel est le principe ? La suppression des objets de requête et la suppression des objets de modèle sont-elles un problème de niveau ? Les signaux intégrés sont-ils basés sur le niveau de la base de données ?

    répondre
    0
  • Annulerrépondre