2011-12-07 157 views
7

no sé por qué, pero de un día para otro y comencé a tener problemas cuando traté de ejecutar las pruebas. estoy usando Django 1.1 (requisitos del cliente) y cuando se ejecuta un poco con la prueba:django: sqlite3.OperationalError: no such table

python manage.py test --setting=settingsTest 

que tiran:

Traceback (most recent call last): 
    File "manage.py", line 11, in <module> 
    execute_manager(settings) 
    File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 362, in execute_manager 
    ... 
    File "/usr/lib/pymodules/python2.6/django/db/backends/sqlite3/base.py", line 193, in execute 
    return Database.Cursor.execute(self, query, params) 
sqlite3.OperationalError: no such table: programas_act_actividadesprograma 

pero tengo en settingsTest.py

INSTALLED_APPS = (
    'django.contrib.auth', 
    ... 

    'site.programas_act', 
    ... 
) 

y en /var/www/site/programas_act/models.py

class ActividadesPrograma(models.Model): 
    ... 

que eliminan el archivo denominado en settingsTest.DATABASE_NAME y ejecute:

python manage.py syncdb --setting=settingsTest 

pero todavía no.

Si corro en shell_plus Django:

import settings 
print settings.INSTALLED_APPS 
for app in settings.INSTALLED_APPS: 
    print app 

puedo ver la aplicación, pero cuando corro:

from django.db import connection 
cursor = connection.cursor() 
qry="""SELECT name FROM sqlite_master 
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' 
UNION ALL 
SELECT name FROM sqlite_temp_master 
WHERE type IN ('table','view') 
ORDER BY 1""" 
cursor.execute(qry) 
results = cursor.fetchall() 
for tablename in results: 
    print tablename 

No puedo encontrado que nombredetabla.

¿Alguien me puede ayudar?

Gracias

+0

Esto también puede ocurrir si sus migraciones no crean una tabla en sus modelos. Ver: http://stackoverflow.com/a/39246325/1551116 –

Respuesta

6

Tuve este problema, también. Resultó que tuve que agregar una propiedad TEST_NAME en el archivo settings.py para identificar la base de datos de prueba correctamente. Me solucionó el problema:

if 'test' in sys.argv: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': os.path.join(os.path.dirname(__file__), 'test.db'), 
      'TEST_NAME': os.path.join(os.path.dirname(__file__), 'test.db'), 
     } 
    } 
+2

Recibo el mismo error incluso después de usar estas configuraciones para 'NAME' y' TEST_NAME' – nnyby

+0

Lo consigo con dos entradas en settings.py DATABASES. Al agregar 'TEST_NAME' lo solucioné por mí. Uno puede ser ': memoria:' pero no ambos. Los intentos de usar ': memory:? Cache = shared' (por documentos de SQLite) no funcionaron. Python 2.7.8/Django 1.6. – JimB

+0

¡No hagas esto! ¡Ejecutar pruebas desde una base de datos que no es de memoria llevará una eternidad! – Cerin

0

creo 'prueba manage.py' comienza con la base de datos vacía, así que no hay manera de cómo 'syncdb' puede ayudar.

Además no estoy seguro si es error tipográfico justo a su pregunta, pero parámetro de configuración se llama

--settings 

y no:

--setting 

por cierto. si eres ajustes importings en código, utilice la importación de esta manera:

from django.conf import settings 
4

¿Son estas pruebas de selenio, por casualidad? This page dice que necesita definir un TEST_NAME para su base de datos, porque por alguna razón la base de datos en memoria está bastante rota.

Cuestiones relacionadas