Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Dúvida no Ex. 1 da Aula 1 - Bem-vindo ao Django

Criei um novo projeto usando o startproject e funcionou. Tentei dar o python manage.py migrate e falhou. Segue a pilha de erro:

C:\Users\Braian Varjão\Dropbox\Cursos_Alura\Django>django-admin.py startproject
connectedout

C:\Users\Braian Varjão\Dropbox\Cursos_Alura\Django>cd connectedout

C:\Users\Braian Varjão\Dropbox\Cursos_Alura\Django\connectedout>python manage.py
 migrate
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
385, in execute_from_command_line
    utility.execute()
  File "C:\Python27\lib\site-packages\django\core\management\__init__.py", line
377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 288,
 in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 338,
 in execute
    output = self.handle(*args, **options)
  File "C:\Python27\lib\site-packages\django\core\management\commands\migrate.py
", line 63, in handle
    executor = MigrationExecutor(connection, self.migration_progress_callback)
  File "C:\Python27\lib\site-packages\django\db\migrations\executor.py", line 17
, in __init__
    self.loader = MigrationLoader(self.connection)
  File "C:\Python27\lib\site-packages\django\db\migrations\loader.py", line 49,
in __init__
    self.build_graph()
  File "C:\Python27\lib\site-packages\django\db\migrations\loader.py", line 184,
 in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "C:\Python27\lib\site-packages\django\db\migrations\recorder.py", line 59
, in applied_migrations
    self.ensure_schema()
  File "C:\Python27\lib\site-packages\django\db\migrations\recorder.py", line 49
, in ensure_schema
    if self.Migration._meta.db_table in self.connection.introspection.get_table_
list(self.connection.cursor()):
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 165,
 in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 138,
 in _cursor
    self.ensure_connection()
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 133,
 in ensure_connection
    self.connect()
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 133,
 in ensure_connection
    self.connect()
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 122,
 in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line
374, in get_new_connection
    conn = Database.connect(**conn_params)
django.db.utils.OperationalError: unable to open database file

Alguém pode ajudar?

8 respostas

Você precisa criar seu banco de dados antes e setá-lo no settings.py. Por exemplo, se você quiser usar postgres, vai precisar instalar no virtualenv o psycopg2 via pip e depois configurar o banco no settings.py através desta variável:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'nome do seu banco de dados local',
        'USER': 'seu usuário aqui',
        'PASSWORD': 'sua senha aqui',
        'HOST': 'se for local localhost',
        'PORT': 'porta. se for a padrão não precisa',
    }
}

Mas eu quero usar o sqllite mesmo. Não deveria já vir configurado no django?

Oi Braian, se você quer sqlite mesmo não deveria ter problemas. A sugestão do Douglas é mais completa, mas para começar com Django pode ficar com o sqlite mesmo.

Primeiro, vamos fazer o check list comigo?

a) A versão do Python é 2.7 ou diferente?

b) a versão do Django é 1.7.X?

c) Vi que mudou o nome do projeto para connectout. Quando você muda o nome do projeto de um curso, você precisará trabalhar com dois modelos mentais, o que você vê o tempo todo no curso e o seu. O ideal é terminar o curso primeiro sem mudar o escopo do treinamento, inclusive nomes. Depois de consolidar o que aprendeu, pode inventar o que quiser porque já estará consolidado.

d) Os passos que você executou , já verificou se pulou algum deles? Por exemplo, executar um comando em pasta diferente é algo corriqueiro, por isso é bom dar uma checada dobrada.

Aguardo seu feedback.

Eu fiz o projeto exatamente do jeito que manda o curso, com as mesmas versões inclusive. O startproject funciona, o que não roda é quando eu entro na pasta do projeto e dou o migrate.

Testei na máquina no trabalho e funcionou. Não sei se o problema é pq minha máquina é Windows 8. Vi em algum fórum que rola uma incompatibilidade com o Apache e o Django, mas não entendi o motivo bem como resolver.

Pelo pouco que entendi do traceback, o django não conseguiu recuperar a conexão com do sqllite, onde eu vejo isso?

Você não precisa do Apache para usar o Django. Aliás, testei no Windows 8.1 e no Windows 10 e funcionou.

Agora que é a questão mais complicada: se você seguiu os passos conforme ensinei e não funciona em sua máquina, pode ser algo específico da sua máquina.

Mas ainda assim, peço que você responda cada uma das perguntas que fiz, principalmente das versões de Python e Django instaladas. O número delas.

a)Versão do python é a 2.7.9

b)Versão do Django 1.7.4

c)O meu projeto connectedin não estava funcionando, tentei criar um novo do zero pra ver se o problema era no projeto ou no django.

d)Coloquei os passos que segui aí na pergunta antes do traceback:

C:\Users\Braian Varjão\Dropbox\Cursos_Alura\Django>django-admin.py startproject
connectedout

C:\Users\Braian Varjão\Dropbox\Cursos_Alura\Django>cd connectedout

C:\Users\Braian Varjão\Dropbox\Cursos_Alura\Django\connectedout>python manage.py
 migrate
solução!

Descobri que o problema está com o caminho do meu projeto. Por ter um "ã" em "Braian Varjão", o Django dá erro. Se eu coloco em qualquer lugar que não tenha uma letra acentuada, funciona.

Acredito que isso não seja um bom funcionamento. Onde eu corrijo isso para que o django funcione normalmente independente do caminho?

Nossa, nem acredito que não percebi isso! Realmente, isso é um problema sério. Não há como resolver até onde eu sei. Sugiro que você crie um novo usuário e nele estudo Django e Python.

Aliás, é uma boa prática não usar acento em nome de pasta nem em nome de arquivo, apesar de alguns sistemas operacionais aceitarem.