2010-09-02 62 views
31

He encontrado varios temas con este título, pero ninguna de sus soluciones funcionó para mí. Tengo dos sitios Django ejecutándose en mi servidor, ambos a través de Apache usando diferentes hosts virtuales en dos puertos alimentados por mi interfaz Nginx (usando para archivos estáticos). Un sitio usa MySql y funciona muy bien. El otro usa Sqlite3 y obtiene el error en el título.Django: no such table: django_session

Descargué una copia de sqlite.exe y miré el archivo mysite.sqlite3 (base de datos SQLite en este directorio) y de hecho hay una tabla django_session con datos válidos. Tengo el sqlite.exe en mi system32, así como la carpeta de paquetes de sitio en mi ruta de Python.

Aquí es una sección de mi archivo settings.py:

MANAGERS = ADMINS 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'mysite.sqlite3',   # Or path to database file if using sqlite3. 
     'USER': '',      # Not used with sqlite3. 
     'PASSWORD': '',     # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

hice uso de la syncdb python manage.py sin errores y una línea de comentario "No hay accesorios".

¿Alguien tiene alguna idea de qué más podría estar pasando aquí? Estoy considerando simplemente transferir todo a mi viejo amigo MySql y simplemente ignorar a Sqlite, ya que realmente siempre me ha dado algún tipo de problema. Solo lo estaba usando para el beneficio de saberlo de todos modos. No tengo una razón abrumadora por la que debería usarlo. Pero de nuevo, solo para mi edificación, ¿alguien sabe cuál es este problema? No me gusta rendirme.

Respuesta

46

Podría ser que el servidor utilice un directorio de trabajo diferente que el comando manage.py. Como usted proporciona una ruta relativa a la base de datos sqlite, se crea en el directorio de trabajo. Prueba con una ruta absoluta, por ejemplo .:

'NAME': '/tmp/mysite.sqlite3', 

Recuerde que usted tiene que funcionar bien ./manage.py syncdb de nuevo o copiar la base de datos actual con las tablas existentes a /tmp.

Si se resuelve el mensaje de error, puede buscar un lugar mejor que /tmp :-)

+0

en realidad, me estoy ejecutando en Windows XP x64;) Es la computadora de mi casa que es el servidor de desarrollo. Por extraño que parezca, eso funcionó cuando no funcionó antes. Alteré el camino a mis paquetes de sitio Python y creó un nuevo archivo de base de datos, sobrescribí ese archivo con el que ya tenía, y luego lo transferí a la carpeta mysite y cambié settings.py a: 'I : /xampp/htdocs/mysite/mysite.sqlite3 'en la ranura NAME. Funcionó por alguna extraña razón –

+0

Lo digo porque antes simplemente cambiaba el NOMBRE a esa cosa exacta y no funcionaba. Pero supongo que forzarlo a crear un nuevo archivo de base de datos, incluso cuando lo sobreescribí con lo que ya tenía, lo desperté de alguna manera. –

+0

exactamente lo que estaba buscando, gracias! –

14

En caso de que ayuda a nadie: el problema para mí era que yo no tenía la django.contrib.sessions aplicación no comentada de mi INSTALLED_APPS. Descomponerlo, y volver a ejecutar un syncdb hizo el truco.

+0

Esto resolvió mi instancia de este error. – Chris

+0

Mina también. Este error probablemente no esté relacionado con el uso de sqlite como controlador de db. – sapht

8

Cuando ejecuto "manage.py runserver". Si ejecuto cuando mi ruta actual no está en el directorio del proyecto (como python /somefolder/somefolder2/currentprj/manage.py runserver), tendré el problema como usted. resolver por cd al directorio del proyecto antes de ejecutar el comando.

+0

Gracias. Estoy djangocms funcionando a #pythonanywhere y al servidor de wsgi añadí 'importación OS import sys path = '/ home/usuario/proyecto' si la ruta no en sys.path: sys.path.append (ruta) os.chdir (ruta) desde la aplicación de importación project.wsgi ' Espero que ayude a1 más.o – JeanPaulDepraz

4

Otra posible causa puede venir de usar:

./manage.py testserver 

Y luego visitar la interfaz de administración. Esto no funcionará porque el servidor de pruebas crea una base de datos completamente separada en la memoria. Si desea visitar la interfaz de administración, necesita usar runserver.

9

En mi caso, el problema fue que olvidé ejecutar manage.py syncdb después de realizar algunos cambios. Cuando lo hice, el problema fue resuelto.

2

tenía el mismo problema, mi resolución era simplemente agregar 'django.contrib.comments' a INSTALLED_APPS y ejecutar ./manage.py syncdb nuevamente.

1

cree un esquema y agregue su nombre en NAME en 'bases de datos' run manage.py syncdb

1

Puede no estar recibiendo el camino de db. Simplemente agregue esto a su settings.py:

import os 
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__)) 

#modify your db NAME as below: 
'NAME': os.path.join(PROJECT_PATH,'mysite.sqlite3'), 
+0

He ajustado esto un poco para que sea más fácil de leer, puede verificar y asegurarse de que no he cambiado algo que elimina el significado? – andrewsi

0

Tenía este problema también. Al reiniciar postgres y apache2 lo hice por mí. Me hace preguntarme si queda algún tipo de proceso sqlite que no se eliminó hasta que jugueteó con los archivos o algo así.

1

He realizado algunos cambios en el modelo que no se ha migrado correctamente a db. Utilizando el comando

manage.py makemigrations 

solucionó mi problema. Espero que esto ayude a alguien.

1

Tuve un problema similar para la administración del administrador. Después de varias comprobaciones, ejecute "python manage.py migrate" sin asignar el nombre de la aplicación (obtenga "Apply all migrations: .....), luego runserver y up en la web. Funcionó. Espero que esto pueda ayudar.

2

Después de realizado algún cambio en el código, ejecute los siguientes comandos

manage.py makemigrations 
manage.py migrate 

que trabajó para mí.

+0

Esto funcionó para mí también ... Aunque no tenía ningún modelo en mi aplicación, creo que aún deberíamos ejecutar estos comandos. –

2

tienes migraciones no aplicados. su aplicación puede no funcionar correctamente hasta que se apliquen. pitón Run' manejar. py migrate 'para aplicarlos. python manage.py migrate Este me funcionó.

+0

¡Me salvaste tanto dolor de cabeza! ¡Gracias! – Mallika

1

syncdb es tratar obsoleta python manage.py makemigrations y python manage.py migrate resuelto el problema, y ​​DONOT se olvide de añadir el nombre de la aplicación es la aplicación instalada en settings.py

-1

Ejecutar este comando cmd:

Python ./manage.py migrate --all 

debe venir en su db

+0

Ten python al principio o ./ al principio. No ambos. – Vikas

0

plazo esto en el intérprete de comandos:

python manage.py migrate 

Esto arreglado para mí.

0

Tuve este problema en un escenario diferente. Soy nuevo en Django y cloné un repositorio de github para practicarlo. El archivo db.sqlite3 también se copió. Pero no había django_session en él. Cuando lo hice

./manage.py showmigrations 

.. Descubrí que hubo algunas migraciones. Pero las tablas faltaban en sqlite, ya que nunca ejecuté migrar. Mi problema se resolvió cuando ejecuté el comando migrate. Espero que esto ayude a los novatos django como yo.

./manage.py migrate 
0

Añadir 'django.contrib.sessions', línea en INSTALLED_APPS

Ejecutar a continuación los comandos de Django shell

python manage.py makemigrations #check for changes 
python manage.py migrate #apply changes in DbSQLite 
python manage.py syncdb #sync with database 

django_session aparecerá en la base de datos con (session_key, session_data , expire_date)

0

En mi caso, tuve que borrar la ' entrada de las sesiones en la tabla django_migrations y ejecutar makemigrations y migrar después. Eso creó la tabla django_session.

Cuestiones relacionadas