sql >> Databáze >  >> RDS >> PostgreSQL

Jak ladit:Interní chyba aktuální transakce je přerušena, příkazy jsou ignorovány až do konce bloku transakce

Ve většině případů to znamená, že předchozí Příkaz SQL se nepodařilo provést. V tomto případě byste měli:

  1. Povolit SQL protokolování , viz následující úryvek, který chcete vložit do settings.py

  2. Nastavte DEBUG=1 nebo SQL nebude protokolováno

  3. Znovu spustit runserver a měli byste vidět všechny SQL dotazy v konzole

  4. Spouštějte poslední dotazy SQL přímo ve vaší databázi , měli byste pak najít, které dotazy selžou, a pak byste měli být schopni je odladit - nebo otevřít novou otázku, která je specifická pro dotaz, který způsobuje problém. Můžete použít phpMyAdmin, nebo přímo klienta CLI, nebo jiného databázového klienta, ke spouštění SQL dotazů jeden po druhém, dokud nenajdete ten, který potřebuje trochu lásky.

Konfigurace protokolování SQL:

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',
       },  
   }   
}

Pokud tato konfigurace neposkytuje žádný další výstup konzoly s runserver , pak neváhejte a vyzkoušejte ukázkový testovací_projekt django-autocomplete-light :

  1. Přečtěte si a vložte instalační příkazy do /tmp

  2. Změňte adresář na autocomplete_light_env/src/django-autocomplete-light/test_project

  3. Otevřete test_project/settings.py , nahraďte LOGGING konfiguraci podle výše uvedeného

  4. Runserver a otevřete prohlížeč

Vaše konzole bude vypadat takto:

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. Jak zkombinuji svých 5 nejlepších platů a 5 nejnižších platů pro zobrazení v Oracle?

  2. regexp_matches je lepší způsob, jak se zbavit vracejících se složených závorek

  3. Oracle SQL - Kontingenční tabulka řádků do sloupce a použití dílčího dotazu v pivotu

  4. Příklady DEGREES() v SQL Server