sql >> データベース >  >> RDS >> PostgreSQL

Djangoは、一括挿入/更新/削除時のデータベーストリガーの動作をエミュレートします

    まず、保存をオーバーライドして__beforeを追加する代わりに および__after メソッドでは、組み込みのpre_saveを使用できます 、post_save, pre_delete, およびpost_delete 信号。 https://docs.djangoproject.com/en/1.4/topics/signals/

    from django.db.models.signals import post_save
    
    class YourModel(models.Model):
        pass
    
    def after_save_your_model(sender, instance, **kwargs):
         pass
    
    # register the signal
    post_save.connect(after_save_your_model, sender=YourModel, dispatch_uid=__file__)
    

    pre_delete およびpost_delete delete()を呼び出すとトリガーされます クエリセットで。

    ただし、一括更新の場合は、トリガーする関数を手動で呼び出す必要があります。また、すべてをトランザクションでスローすることもできます。

    動的モデルを使用している場合に適切なトリガー関数を呼び出すために、モデルのContentTypeを検査できます。例:

    from django.contrib.contenttypes.models import ContentType
    
    def view(request, app, model_name, method):
        ...
        model = get_model(app, model_name)
        content_type = ContentType.objects.get_for_model(model)
        if content_type == ContenType.objects.get_for_model(YourModel):
            after_save_your_model(model)
        elif content_type == Contentype.objects.get_for_model(AnotherModel):
            another_trigger_function(model)
    


    1. コレクションにパラメータ@Nameが見つかりません

    2. 失敗したすべてのSQLステートメントをOracle10Gに記録する方法はありますか

    3. AppEnginePHPをGoogleCloudSQLデータベースに接続するためのサポートが必要

    4. MySQLコードをPDOステートメントに変換する方法は?