sql >> Database teknologi >  >> RDS >> PostgreSQL

Django emulerer databasetriggeradfærd ved masseindsættelse/opdatering/sletning

Først, i stedet for at tilsidesætte gem for at tilføje __before og __after metoder, kan du bruge den indbyggede pre_save , post_save, pre_delete, og post_delete signaler. https://docs.djangoproject.com/da/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 og post_delete vil blive udløst, når du kalder delete() på et forespørgselssæt.

Til masseopdatering skal du dog manuelt kalde den funktion, du selv vil udløse. Og du kan også smide det hele i en transaktion.

For at kalde den korrekte triggerfunktion, hvis du bruger dynamiske modeller, kan du inspicere modellens ContentType. For eksempel:

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. Sådan får du en liste over alle sprog i SQL Server (T-SQL)

  2. Hvordan konfigureres tidszonen xampp mysql og apache?

  3. Tilslutning af SQL Server 2008 til Java:Login mislykkedes på grund af brugerfejl

  4. Måder at spore slettet database i SQL Server