Aula 07 – Curso básico de Django

Criando uma primeira aplicação com Django e mysql no Ubuntu

Configurando o Django para trabalhar com o mysql

https://docs.djangoproject.com/pt-br/1.11/intro/tutorial02/

Aplicação Django com mysql

Configurando o Django com mysql

Depois de criar uma app, é preciso registrá-la no arquivo de configuração do projeto, o settings.py:

# Application definition
INSTALLED_APPS = [
      'django.contrib.admin',
       'django.contrib.auth',
       'django.contrib.contenttypes',
       'django.contrib.sessions',
       'django.contrib.messages',
       'django.contrib.staticfiles',
       'polls',
]

INSTALLED_APPS  possui os nomes de todas as aplicações Django ativas para essa instância do Django.

Aplicações podem ser usadas em múltiplos projetos, e você pode empacotá-las e distribuí-las para uso em outros projetos.

As aplicações que já estão lá por padrão, são incluídas como uma conveniência já que são comuns em vários projetos.

Ainda no settings.py vamos mudar o TIME_ZONE e o LANGUAGE_CODE :


# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

Para:


# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'pt-br'
TIME_ZONE = 'America/Sao_Paulo'
USE_I18N = True
USE_L10N = True
USE_TZ = True

 

Vamos criar o banco de dados da app, para isso vamos entrar no console do mysql como usuário root, para isso, digite:

mysql –u root –p

Dá enter, digita a senha e dá enter de novo.

O prompt muda para o mysql.

Crie um usuário chamado django, com privilégio de acesso root.

CREATE USER 'django'@'localhost' IDENTIFIED BY 'sua_senha';

Dê a permissão para o usuário django:

GRANT ALL PRIVILEGES ON *.* TO 'django'@'localhost' IDENTIFIED BY 'sua_senha';

Agora vamos criar o banco de dados da app no mysql:

CREATE DATABASE db_mysite;

Para selecionar o banco use:

USE db_mysite;

Saia do shell do mysql com:

exit

No settings.py vamos mudar a configuração do DATABASE:


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'db_mysite',
        'USER': 'django',
        'PASSWORD': 'sua_senha',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

Algumas dessas aplicações fazem uso de pelo menos uma tabela no banco de dados, por isso, precisamos criar as tabelas no banco de dados antes de utilizá-las. Para isso rode o comando:

python manage.py migrate

Caso dê erro informando que não encontrou mysqlclient, tente o comando:

pip install mysqlclient

Ou

pip3 install mysqlclient

Depois execute novamente o:

python manage.py migrate
O comando migrate verifica a configuração em INSTALLED_APPS e cria a(s) tabela(s) do banco de dados necessária(s) de acordo com as configurações do banco de dados no seu arquivo mysite/settings.py e as migrações que venham com a app.

É mostrado uma mensagem para cada migração aplicada.

Para baixar o código como está até agora, acesse o meu github no link abaixo:
https://github.com/toticavalcanti/django_course/tree/project_config

AULA  06

AULA  08

Todas as Aulas da App Polls

Página Principal

Obrigado

Até a próxima

Aula 07 – Configurando o Django com mysql no Ubuntu

About The Author
-

5 Comentários

  • VITOR RAMALHO VILELA
    Reply

    Boa tarde professor. Encontrei um erro na hr de executar o comando pip install mysqlclient para corrigir o erro no migrate, o erro foi o seguinte:

    Collecting mysqlclient
    Using cached https://files.pythonhosted.org/packages/6f/86/bad31f1c1bb0cc99e88ca2adb7cb5c71f7a6540c1bb001480513de76a931/mysqlclient-1.3.12.tar.gz
    Complete output from command python setup.py egg_info:
    /bin/sh: 1: mysql_config: not found
    Traceback (most recent call last):
    File “”, line 1, in
    File “/tmp/pip-install-ii7f2c7k/mysqlclient/setup.py”, line 17, in
    metadata, options = get_config()
    File “/tmp/pip-install-ii7f2c7k/mysqlclient/setup_posix.py”, line 44, in get_config
    libs = mysql_config(“libs_r”)
    File “/tmp/pip-install-ii7f2c7k/mysqlclient/setup_posix.py”, line 26, in mysql_config
    raise EnvironmentError(“%s not found” % (mysql_config.path,))
    OSError: mysql_config not found

    —————————————-
    Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-install-ii7f2c7k/mysqlclient/

    Aguardo resposta, obrigado!!!

    • toticavalcanti
      Reply

      Olá Vitor, tenta instalar o mysql client lib com:
      sudo apt install libmysqlclient-dev

      Depois tenta:
      pipenv install mysqlclient

      ou

      pip install mysqlclient

      Qualquer coisa me fala, abs.
      Toti

  • Romulo Sobreira
    Reply

    olá bom dia, ao executar o comando python manage.py migrate aparece isso:
    Traceback (most recent call last):
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 216, in ensure_connection
    self.connect()
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 194, in connect
    self.connection = self.get_new_connection(conn_params)
    File “/home/romulo/django_codes/django/django/db/backends/mysql/base.py”, line 227, in get_new_connection
    return Database.connect(**conn_params)
    File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/__init__.py”, line 85, in Connect
    return Connection(*args, **kwargs)
    File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/connections.py”, line 204, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
    _mysql_exceptions.OperationalError: (1045, “Access denied for user ‘django’@’localhost’ (using password: NO)”)

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
    File “manage.py”, line 15, in
    execute_from_command_line(sys.argv)
    File “/home/romulo/django_codes/django/django/core/management/__init__.py”, line 381, in execute_from_command_line
    utility.execute()
    File “/home/romulo/django_codes/django/django/core/management/__init__.py”, line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File “/home/romulo/django_codes/django/django/core/management/base.py”, line 323, in run_from_argv
    self.execute(*args, **cmd_options)
    File “/home/romulo/django_codes/django/django/core/management/base.py”, line 361, in execute
    self.check()
    File “/home/romulo/django_codes/django/django/core/management/base.py”, line 390, in check
    include_deployment_checks=include_deployment_checks,
    File “/home/romulo/django_codes/django/django/core/management/commands/migrate.py”, line 64, in _run_checks
    issues = run_checks(tags=[Tags.database])
    File “/home/romulo/django_codes/django/django/core/checks/registry.py”, line 72, in run_checks
    new_errors = check(app_configs=app_configs)
    File “/home/romulo/django_codes/django/django/core/checks/database.py”, line 10, in check_database_backends
    issues.extend(conn.validation.check(**kwargs))
    File “/home/romulo/django_codes/django/django/db/backends/mysql/validation.py”, line 9, in check
    issues.extend(self._check_sql_mode(**kwargs))
    File “/home/romulo/django_codes/django/django/db/backends/mysql/validation.py”, line 13, in _check_sql_mode
    with self.connection.cursor() as cursor:
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 255, in cursor
    return self._cursor()
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 232, in _cursor
    self.ensure_connection()
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 216, in ensure_connection
    self.connect()
    File “/home/romulo/django_codes/django/django/db/utils.py”, line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 216, in ensure_connection
    self.connect()
    File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 194, in connect
    self.connection = self.get_new_connection(conn_params)
    File “/home/romulo/django_codes/django/django/db/backends/mysql/base.py”, line 227, in get_new_connection
    return Database.connect(**conn_params)
    File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/__init__.py”, line 85, in Connect
    return Connection(*args, **kwargs)
    File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/connections.py”, line 204, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
    django.db.utils.OperationalError: (1045, “Access denied for user ‘django’@’localhost’ (using password: NO)”)

    • toticavalcanti
      Reply

      Olá Romulo Sobreira, tudo bem?
      Desculpe a demora, mas, ando um pouco ocupado.
      Cara, o problema é com as credenciais do MySql, alguma coisa de senha e permissão, você criou um usuário chamado django, com privilégio de acesso root como mostrado na parte escrita do tutorial?
      É que quando gravei o vídeo da aula, não mostrei como criar o usuário django (ou qualquer outro nome). No vídeo eu mostrei usando o usuário root do MySql. Mas, por uma questão de segurança e organização é aconselhável criar um usuário chamado django, ou qualquer outro nome que queira, com privilégio de administrador, isso pode evitar inclusive esse erro que deu aí com você.

      Dá uma conferida também no seu settings.py, na parte:

      DATABASES = {
      ‘default’: {
      ‘ENGINE’: ‘django.db.backends.mysql’,
      ‘NAME’: ‘DB_NAME’,
      ‘USER’: ‘DB_USER’,
      ‘PASSWORD’: ‘DB_PASSWORD’,
      ‘HOST’: ‘localhost’, # Or an IP Address that your DB is hosted on
      ‘PORT’: ‘3306’,
      }
      }

      Em ‘NAME’ você vai colocar ‘db_mysite’, se esse for o nome do seu database, em ‘USER’ vai colocar ‘django’e ‘PASSWORD’ sua password do mysql.
      Vê se seu user e senha batem corretamente com o user e senha que você definiu.
      Se não conseguir resolver, me passa mais detalhes.
      Abs
      Toti

  • Anonymous
    Reply

    Caso alguém tenha mais erros tente fazer as seguintes instalações antes do migrate
    sudo apt install build-essential
    sudo apt install libmysqlclient21
    sudo apt install libmysqlclient-dev
    pip3 install mysqlclient

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>