sql >> Database >  >> RDS >> PostgreSQL

Hoe te debuggen:Interne fout huidige transactie is afgebroken, opdrachten genegeerd tot einde transactieblok

In de meeste gevallen betekent dit dat de vorige SQL-instructie kan niet worden uitgevoerd. In dit geval moet u:

  1. SQL inschakelen logging , zie het volgende fragment om in settings.py te plakken

  2. DEBUG=1 instellen , of SQL wordt niet gelogd

  3. Voer runserver opnieuw uit , en u zou alle SQL-query's in de console moeten zien

  4. Voer de laatste SQL-query's rechtstreeks in uw database uit , zou je dan moeten uitzoeken welke query's mislukken en dan zou je in staat moeten zijn om ze te debuggen - of een nieuwe vraag te openen die specifiek is voor de query die het probleem veroorzaakt. U kunt phpMyAdmin gebruiken, of rechtstreeks een CLI-client, of welke databaseclient dan ook, om de SQL-query's één voor één uit te voeren totdat u degene vindt die wat liefde nodig heeft.

Configuratie SQL-logboekregistratie:

LOGGING = { 
   'version': 1,
   'disable_existing_loggers': True,
   'formatters': {
       'simple': {
           'format': '%(levelname)s %(message)s',
       },  
   },  
   'handlers': {
       'console':{
           'level':'DEBUG',
           'class':'logging.StreamHandler',
           'formatter': 'simple'
       },  
   },  
   'loggers': {
       'django': {
           'handlers': ['console'],
           'level': 'DEBUG',
       },  
   }   
}

Als deze configuratie geen extra console-uitvoer biedt met runserver , probeer dan gerust voorbeeld testproject van django-autocomplete-light :

  1. Lees en plak de installatiecommando's in /tmp

  2. Wijzig de map in autocomplete_light_env/src/django-autocomplete-light/test_project

  3. Open test_project/settings.py , vervang de LOGGING configuratie door degene hierboven

  4. Runserver en open uw browser

Uw console ziet er als volgt uit:

Validating models...

0 errors found
Django version 1.4.1, using settings 'test_project.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
DEBUG (0.001) SELECT "django_content_type"."id", "django_content_type"."name", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."model" = taggable  AND "django_content_type"."app_label" = charfield_autocomplete ); args=('taggable', 'charfield_autocomplete')
DEBUG (0.000) 
        SELECT DISTINCT "tagging_tag".id, "tagging_tag".name
        FROM
            "tagging_tag"
            INNER JOIN "tagging_taggeditem"
                ON "tagging_tag".id = "tagging_taggeditem".tag_id
            INNER JOIN "charfield_autocomplete_taggable"
                ON "tagging_taggeditem".object_id = "charfield_autocomplete_taggable"."id"

        WHERE "tagging_taggeditem".content_type_id = 11

        GROUP BY "tagging_tag".id, "tagging_tag".name

        ORDER BY "tagging_tag".name ASC; args=[]



  1. Vergelijk datums die zijn opgeslagen als string met behulp van Datetime

  2. How-to:Zoekresultaten rangschikken

  3. Gegevens ophalen uit MYSQL op basis van weeknummer

  4. Beperking voor slechts één record gemarkeerd als standaard