ti-enxame.com

Django: no such table: Django_session

Eu encontrei vários tópicos com este título, mas nenhuma das suas soluções funcionou para mim. Eu tenho dois sites Django em execução no meu servidor, ambos através do Apache usando diferentes hosts virtuais em duas portas alimentadas pelo meu front-end Nginx (usando para arquivos estáticos). Um site usa MySql e funciona muito bem. O outro usa Sqlite3 e obtém o erro no título.

Eu baixei uma cópia do sqlite.exe e olhei para o arquivo mysite.sqlite3 (banco de dados SQLite neste diretório) e há de fato uma tabela Django_session com dados válidos. Eu tenho o sqlite.exe no meu system32, bem como a pasta site-packages no meu caminho Python.

Aqui está uma seção do meu arquivo 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.
    }
}

Eu usei o python manage.py syncdb sem erros e apenas um comentário "No Fixtures".

Alguém tem alguma idéia do que mais poderia estar acontecendo aqui? Estou pensando em transferir tudo para o meu antigo amigo MySql e apenas ignorar o Sqlite, já que na verdade sempre me deu algum tipo de problema. Eu só estava usando isso para o benefício de conhecê-lo de qualquer maneira. Eu não tenho nenhuma razão esmagadora para usar. Mas, novamente, só para minha edificação alguém sabe o que é esse problema? Eu não gosto de desistir.

35
F_C

Pode ser que o servidor use um diretório de trabalho diferente do comando manage.py. Como você fornece um caminho relativo ao banco de dados sqlite, ele é criado no diretório de trabalho. Experimente com um caminho absoluto, por exemplo:

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

Lembre-se de que você precisa executar ./manage.py syncdb novamente ou copiar seu banco de dados atual com as tabelas existentes para /tmp.

Se resolver a mensagem de erro, você pode procurar um lugar melhor que /tmp :-)

47
Benjamin Wohlwend

Caso isso ajude alguém: o problema para mim é que eu não tinha o aplicativo Django.contrib.sessions descomentado no meu INSTALLED_APPS. Descomentando-o e executando novamente um syncdb fez o truque.

14
Gervase Markham

No meu caso, o problema foi que eu esqueci de executar manage.py syncdb depois de fazer algumas alterações. Quando fiz isso, o problema foi resolvido.

12
George Eracleous

Depois de fazer qualquer alteração no código, execute os seguintes comandos

manage.py makemigrations
manage.py migrate

funcionou para mim.

9
CMY

Quando eu corro "manage.py runserver". Se eu executo quando meu caminho atual não está no diretório do projeto (como python /somefolder/somefolder2/currentprj/manage.py runserver), recebo o problema como você. resolva por cd para o diretório project antes do comando run.

8
Chaiwit Jarunyakorn

execute isto no comando Shell:

python manage.py migrate

Isso fixo para mim.

5
CodeBlooded

Outra causa possível pode vir do uso:

./manage.py testserver

E então visitar a interface de administração. Isso não funcionará porque o servidor de testes cria um banco de dados completamente separado na memória. Se você quiser visitar a interface de administração, você precisa usar o runserver. 

4
aychedee

tinha o mesmo problema, minha resolução era simplesmente adicionar 'Django.contrib.comments' a INSTALLED_APPS e executar ./manage.py syncdb novamente.

2
Midge

Você tem migrações não aplicadas. seu aplicativo pode não funcionar corretamente até que eles sejam aplicados. Execute 'python manage.py migrate' para aplicá-los. python manage.py migrate Esse funcionou para mim.

2
Sanjay

crie um esquema e adicione seu nome sob NAME em 'databases' execute manage.py syncdb 

1
devesh

Eu tive problema semelhante para gerenciamento de administração. Depois de várias verificações, execute "python manage.py migrate" sem atribuir o nome da APP (get "Apply all migrations: .....), depois runerver e up on the web. Funcionou. Espero que isso ajude.

1
jayson888

Eu fiz algumas alterações no modelo que não foi migrado para o db corretamente. Usando o comando

manage.py makemigrations

corrigi meu problema. Espero que isso ajude alguém. 

1
Raghu Venmarathoor

Pode não estar obtendo o caminho do db. Basta adicionar isso ao seu 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'),
1
eswar

syncdb está obsoleta tente python manage.py makemigrations e python manage.py migrate resolveu o problema, e não se esqueça de adicionar o nome do aplicativo ao aplicativo instalado em settings.py

1
Pranoy Sarkar

Eu tive esse problema em um cenário diferente. Eu sou novo no Django e clonei um repositório do github para praticar nele. O arquivo db.sqlite3 também foi copiado. Mas não havia Django_session nele. Quando eu fiz

./manage.py showmigrations

.. Descobri que houve algumas migrações. Mas as tabelas estavam faltando no sqlite, como eu nunca corri migrar. Meu problema foi resolvido quando eu executei o comando de migração. Espero que isso ajude novatos do Django como eu.

./manage.py migrate
0
Vikas

Eu tive o mesmo problema, então eu corri 

heroku run ls

e descobri que o arquivo db.sqlite3 estava faltando no servidor. No meu caso, foi porque eu o isentei adicionando-o no arquivo .gitignore.

0
Steev James

Tive esse problema também. Reiniciando postgres e Apache2 fez isso por mim. Me faz pensar se havia algum tipo de processo sqlite que não foi removido até você mexer nos arquivos ou algo assim.

0
Will S

Adicionar 'Django.contrib.sessions', line em INSTALLED_APPS

Execute os comandos abaixo do 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á no banco de dados com (session_key, session_data , expire_date)

0
Roshan Bagdiya

No meu caso, eu tive que apagar a entrada 'sessions' na tabela Django_migrations e executar migrações e migrar depois. Isso criou a tabela Django_session.

0
panyjalea

Para mim, foi que atualizei settings.py, executei as migrações, mas o processo systemd ainda estava usando SQLite porque não o recarreguei. Fazer systemctl restart service_name resolveu o problema.

0
Pavel Vergeev

E pode ser que você esteja recebendo este erro porque esqueceu de executar o python manage.py da consulta, antes de criar superusuário

0
Nikhil Bhardwaj