Configurando o Django para usar o MySQL

171

Eu quero me afastar um pouco do PHP e aprender Python. Para fazer o desenvolvimento web com o Python, precisarei de uma estrutura para ajudar na modelagem e outras coisas.

Eu tenho um servidor de não produção que eu uso para testar todo o material de desenvolvimento da web. É uma pilha Debian 7.1 LAMP que executa o MariaDB em vez do pacote comum do servidor MySQL.

Ontem instalei o Django e criei meu primeiro projeto chamado firstweb . Ainda não alterei nenhuma configuração.

Aqui está o meu primeiro grande pedaço de confusão. No tutorial, segui o cara que instalou o Django, iniciou seu primeiro projeto, reiniciou o Apache e o Django apenas trabalhou a partir de então. Ele foi ao seu navegador e foi para a página padrão do Django sem problemas.

No entanto, eu tenho que entrar na minha primeira pasta da web e executar

python manage.py runserver myip:port

E isso funciona. Sem problemas. Mas estou me perguntando se deveria funcionar assim, e se isso causará problemas na linha?

Minha segunda pergunta é que eu quero configurá-lo para que ele use meu banco de dados MySQL. Entro em meu settings.py em / firstweb / firstweb e vejo ENGINE e NAME, mas não sei ao certo o que colocar aqui.

E então, nas áreas USER, PASSWORD e HOST, esse é meu banco de dados e suas credenciais? Se eu estiver usando o host local , basta colocar o host local na área HOST?

Gregor
fonte
Nota: a partir de 01/2016, não há driver MySQL para python 3.5.x. Consulte stackoverflow.com/questions/34456770/… Portanto, use apenas até Python 3.4. Você ainda pode usar o Django 1.9 (última versão estável a partir de 01/2016).
Tomas Tintera

Respostas:

316

O suporte ao MySQL é simples de adicionar. No seu DATABASESdicionário, você terá uma entrada como esta:

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',
    }
}

Você também tem a opção de utilizar arquivos de opções do MySQL , a partir do Django 1.7. Você pode fazer isso configurando sua DATABASESmatriz da seguinte maneira:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

Você também precisa criar o /path/to/my.cnfarquivo com configurações semelhantes acima

[client]
database = DB_NAME
host = localhost
user = DB_USER
password = DB_PASSWORD
default-character-set = utf8

Com este novo método de conexão no Django 1.7, é importante saber que as conexões de ordem são estabelecidas:

1. OPTIONS.
2. NAME, USER, PASSWORD, HOST, PORT
3. MySQL option files.

Em outras palavras, se você definir o nome do banco de dados em OPTIONS, isso terá precedência sobre NAME, que substituiria qualquer coisa em um arquivo de opções do MySQL.


Se você está apenas testando seu aplicativo em sua máquina local, pode usar

python manage.py runserver

A adição do ip:portargumento permite que máquinas diferentes da sua tenham acesso ao seu aplicativo de desenvolvimento. Quando estiver pronto para implantar seu aplicativo, recomendo dar uma olhada no capítulo Sobre a implantação do Django no djangobook

O conjunto de caracteres padrão do Mysql geralmente não é utf-8, portanto, certifique-se de criar seu banco de dados usando este sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Se você estiver usando o conector MySQL da Oracle, sua ENGINElinha deve ficar assim:

'ENGINE': 'mysql.connector.django',

Observe que você primeiro precisará instalar o mysql no seu sistema operacional.

brew install mysql (MacOS)

Além disso, o pacote do cliente mysql mudou para python 3 ( MySQL-Clientfunciona apenas para python 2)

pip3 install mysqlclient
Andy
fonte
26

Para o primeiro, execute os comandos abaixo para instalar dependências python, caso contrário, o comando python runserver lançará um erro.

sudo apt-get install libmysqlclient-dev
sudo pip install MySQL-python

Em seguida, configure o arquivo settings.py conforme definido por #Andy e, finalmente, execute:

python manage.py runserver

Diverta-se..!!

Ritesh
fonte
18

Se você estiver usando python3.x, execute o comando abaixo

pip install mysqlclient

Então mude setting.py como

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }
Manoj Jadhav
fonte
1
Estou usando o virtualenv com python 3.6. Isso salva minha vida. Obrigado. Além disso, lembre-se de criar DB no mysql primeiro
Fred
15

Como dito acima, você pode instalar o xampp facilmente primeiro em https://www.apachefriends.org/download.html Em seguida, siga as instruções como:

  1. Instale e execute o xampp em http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ e inicie o Apache Web Server e o MySQL Database na GUI.
  2. Você pode configurar seu servidor da Web como desejar, mas por padrão o servidor da Web está em http://localhost:80e banco de dados em port 3306, e PhpMyadmin emhttp://localhost/phpmyadmin/
  3. A partir daqui, você pode ver seus bancos de dados e acessá-los usando uma interface gráfica amigável.
  4. Crie qualquer banco de dados que você deseja usar no seu projeto Django.
  5. Edite seu settings.pyarquivo como:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
    
  6. Instale os seguintes pacotes no virtualenv (se você estiver usando o django no virtualenv, o que é mais preferido):

    sudo apt-get install libmysqlclient-dev

    pip instala o MySQL-python

  7. É isso aí!! você configurou o Django com MySQL de uma maneira muito fácil.

  8. Agora execute o seu projeto Django:

    python manage.py migrate

    python manage.py runserver

raiz
fonte
7

Na verdade, existem muitos problemas com diferentes ambientes, versões em python, etc. Você também pode precisar instalar arquivos dev python, para 'força bruta' a instalação, eu executaria tudo isso:

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install MySQL-python
pip install pymysql
pip install mysqlclient

Você deve concordar com a resposta aceita. E pode remover os pacotes desnecessários, se isso for importante para você.

mimoralea
fonte
7

Execute estes comandos

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install MySQL-python 
pip install pymysql
pip install mysqlclient

Em seguida, configure settings.py como

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123456',
    }
}

Aproveite a conexão mysql

Deepak Kumar
fonte
4

A resposta de Andy ajuda, mas se você tiver alguma dúvida em expor sua senha do banco de dados em sua configuração de django, sugiro seguir a configuração oficial do django na conexão mysql: https://docs.djangoproject.com/en/1.7/ref/databases/

Citado aqui como:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}


# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8

Para substituir 'HOST': '127.0.0.1' na configuração, basta adicioná-lo em my.cnf:

# my.cnf
[client]
database = NAME
host = HOST NAME or IP
user = USER
password = PASSWORD
default-character-set = utf8

Outra OPÇÃO que é útil é definir seu mecanismo de armazenamento para o django, você pode querer em seu setting.py:

'OPTIONS': {
   'init_command': 'SET storage_engine=INNODB',
}
Jiawei Dai
fonte
4

settings.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'django',
    'USER': 'root',
    'PASSWORD': '*****',
    'HOST': '***.***.***.***',
    'PORT': '3306',
    'OPTIONS': {
        'autocommit': True,
    },
}

}

então:

python manage.py migrate

se o sucesso gerar essas tabelas:

auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

e você pode usar o mysql.

este é um exemplo de demonstração, teste no Django versão 1.11.5: Django-pool-showcase

LuciferJack
fonte
3
  1. Instalar mysqlclient

sudo pip3 install mysqlclient

se você receber um erro:

O comando "python setup.py egg_info" falhou com o código de erro 1 em / tmp / pip-install-dbljg4tx / mysqlclient /

então:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Modifique settings.py

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'website',
            'USER': 'root',
            'PASSWORD': '',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'OPTION': {'init_command':"SET sql_mode='STRICT_TRANS_TABLE',"},
        }
    }
Shubham Harinkhede
fonte
1

Siga as etapas fornecidas para configurá-lo para usar o banco de dados MySQL:

1) Install MySQL Database Connector :

    sudo apt-get install libmysqlclient-dev

2) Install the mysqlclient library :

    pip install mysqlclient

3) Install MySQL server, with the following command :

    sudo apt-get install mysql-server

4) Create the Database :

    i) Verify that the MySQL service is running:

        systemctl status mysql.service

    ii) Log in with your MySQL credentials using the following command where -u is the flag for declaring your username and -p is the flag that tells MySQL that this user requires a password :  

        mysql -u db_user -p


    iii) CREATE DATABASE db_name;

    iv) Exit MySQL server, press CTRL + D.

5) Add the MySQL Database Connection to your Application:

    i) Navigate to the settings.py file and replace the current DATABASES lines with the following:

        # Database
        # https://docs.djangoproject.com/en/2.0/ref/settings/#databases

        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'OPTIONS': {
                    'read_default_file': '/etc/mysql/my.cnf',
                },
            }
        }
        ...

    ii) Next, lets edit the config file so that it has your MySQL credentials. Use vi as sudo to edit the file and add the following information:

        sudo vi /etc/mysql/my.cnf

        database = db_name
        user = db_user
        password = db_password
        default-character-set = utf8

6) Once the file has been edited, we need to restart MySQL for the changes to take effect :

    systemctl daemon-reload

    systemctl restart mysql

7) Test MySQL Connection to Application:

    python manage.py runserver your-server-ip:8000
Shubham Gupta
fonte
0

Você deve criar um banco de dados MySQL primeiro. Em seguida, vá ao settings.pyarquivo e edite o 'DATABASES'dicionário com suas credenciais do MySQL:

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

Aqui está um guia de instalação completo para configurar o Django para usar o MySQL em um virtualenv:

http://codex.themedelta.com/how-to-install-django-with-mysql-in-a-virtualenv-on-linux/

Sibi M
fonte