Tengo un proyecto Django 3.0.8 ejecutándose localmente, conectado a una base de datos PostgreSQL local ( postgres:///myapp ). Cuando ejecuto python manage.py test , mis pruebas unitarias funcionan bien; automáticamente se crea una base de datos de prueba llamada test_myapp y se accede a ella correctamente.
Sin embargo, cuando ejecuto python manage.py test --parallel 8 , la prueba falla. Veo que se generan correctamente 8 bases de datos clonadas ( test_myapp_1 , test_myapp_2 ,..., test_myapp_8 ), pero obtengo errores como estos:
psycopg2.OperationalError: FATAL: database "myapp_3" does not exist Parece que para las pruebas paralelas, se accede incorrectamente a las bases de datos (intentando acceder a la base de datos myapp_N en lugar de test_myapp_N ). Estoy tratando de averiguar si mi configuración local tiene problemas, pero esto es todo lo que tengo en mi configuración base:
DATABASES = { 'default': env.db('DATABASE_URL', default='postgres:///myapp'), } DATABASES['default']['ATOMIC_REQUESTS'] = True¿Por qué mis procesos de pruebas paralelas no acceden correctamente a sus respectivas bases de datos de pruebas clonadas?
Una solución simple que funcionó para mí es especificar explícitamente el nombre de la base de datos de prueba en settings.py , por ejemplo,
DATABASES = { 'default': { ... 'TEST': { # Avoid naming it the same as your original database name. # Otherwise, it will be used while testing (and even may get deleted). 'NAME': 'name_of_your_choice', }, }, ... }Si está utilizando varias bases de datos , es posible que deba hacerlo para todas ellas.
para usar la base de datos PostgreSQL en su proyecto Django, puede configurar su base de datos de la misma manera.
DATABASES = { 'default': { "ENGINE": "django.db.backends.postgresql_psycopg2", "NAME": 'Table_name', "USER": 'user_name', "PASSWORD": 'password', "HOST": 'localhost', # or 127.0.0.1 "PORT": '5432', #5432 is the default PostgreSQL port if you change it must change this port } }y para configurar múltiples bases de datos en su proyecto Django, puede ver esta página y usarla.