Error operativo mientras se ejecutan pruebas de unidad Django

He dockerized mi aplicación Django junto con mi base de datos postgres. Sin embargo, después de la dockerización, las pruebas de la unidad que he escrito (no el SimpleTestCase pero los TestCase) dejaron de funcionar.

Pensé que podría ser debido al nuevo db así que modifique el ajuste para las pruebas para ejecutar con el DJango db predeterminado:

import sys

if 'test' in sys.argv:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3'
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'postgres',
            'USER': 'postgres',
            'PASSWORD': 'postgres',
            'HOST': 'db',
            'PORT': 5432,
        }
    }

Aún así, tengo el siguiente error:

Creating test database for alias 'default'...
Traceback (most recent call last):
  File ".../.local/lib/python3.8/site-packages/django/db/backends/utils.py", line 82, in _execute
    return self.cursor.execute(sql)
  File ".../.local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py", line 411, in execute
    return Database.Cursor.execute(self, query)
sqlite3.OperationalError: near "[1]": syntax error

¿Alguna idea de cuál podría ser el problema y cómo se puede arreglar?

Pregunta hecha hace 3 años, 4 meses, 26 días - Por algorithmwizard


3 Respuestas:

  • Puedes hacerlo Esto

    import sys
    
    DATABASES = None 
    
    if 'test' in sys.argv:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3',
                'NAME': BASE_DIR / 'db.sqlite3'
            }
        }
    else:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.postgresql',
                'NAME': 'postgres',
                'USER': 'postgres',
                'PASSWORD': 'postgres',
                'HOST': 'db',
                'PORT': 5432,
            }
        }
    

    Respondida el Dec 20, 2020 a las 22:20 - por compilercaptain7dab

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás viendo parece estar relacionado con la forma en que Django está tratando de crear la base de datos SQLite para las pruebas de unidad. El error "sqlite3.OperationalError: near '[1]': syntax error" indica que hay un problema de sintaxis en la creación de la base de datos SQLite.

    Una posible solución a este problema es asegurarse de que estás definiendo correctamente la ruta a la base de datos SQLite en tu configuración. En lugar de usar BASE_DIR, puedes usar el path absoluto de la ruta a la base de datos sqlite3.

    python
    import os
    
    if 'test' in sys.argv:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3',
                'NAME': os.path.join(BASE_DIR, 'db.sqlite3')
            }
        }
    else:
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.postgresql',
                'NAME': 'postgres',
                'USER': 'postgres',
                'PASSWORD': 'postgres',
                'HOST': 'db',
                'PORT': 5432,
            }
        }
    

    Asegúrate de que estás utilizando la variable BASE_DIR correctamente y que la ruta a la base de datos SQLite es válida. Una vez que hagas estos ajustes, intenta ejecutar nuevamente las pruebas de unidad para ver si el error persiste.

    Si el problema persiste, revisa la configuración de las pruebas y la configuración de la base de datos para asegurarte de que todo esté correctamente ajustado y no haya conflictos entre la configuración de la base de datos SQLite y PostgreSQL.

    Respondida el Dec 21, 2020 a las 22:17 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando se debe probablemente a un problema con la configuración de tu base de datos PostgreSQL. El mensaje de error "near \"1]\": syntax error" indica que hay un error de sintaxis en tu consulta SQL.

    Para solucionar este problema, revisa lo siguiente:

    • Verifica la sintaxis de tu consulta SQL: Asegúrate de que tu consulta SQL no contenga errores de sintaxis, como comillas o paréntesis que faltan.
    • Comprueba la configuración de la base de datos: Asegúrate de que la configuración de tu base de datos PostgreSQL sea correcta, incluyendo el nombre de la base de datos, el nombre de usuario, la contraseña y el puerto.
    • Vuelve a crear la base de datos: Intenta eliminar la base de datos PostgreSQL existente y volver a crearla. Esto puede ayudar a resolver cualquier problema de corrupción o configuración.
    • Actualiza Django: Asegúrate de estar utilizando la última versión de Django. Django ha lanzado varias actualizaciones que pueden abordar problemas de compatibilidad con las bases de datos PostgreSQL.

    Además, aquí tienes algunas sugerencias adicionales:

    Añade más información de depuración a tus pruebas para identificar el error exacto. Utiliza una herramienta como pgAdmin para conectarte directamente a tu base de datos PostgreSQL y ejecutar consultas para depurar el problema.

    • Consulta la documentación de Django sobre la configuración de bases de datos PostgreSQL: https://docs.djangoproject.com/en/stable/ref/databases/postgresql-backend
    Si todavía tienes problemas, proporciona más detalles sobre la configuración de tu base de datos PostgreSQL y el código de tu prueba fallida.

    Respondida el Dec 21, 2020 a las 22:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0