Налаштування Django використовувати MySQL


171

Я хочу трохи відійти від PHP та вивчити Python. Для того, щоб робити веб-розробки з Python, мені знадобиться рамка, яка допоможе в розробці шаблонів та інших речей.

У мене є невиробничий сервер, який я використовую для перевірки всіх матеріалів веб-розробки. Це стек Debian 7.1 LAMP, який запускає MariaDB замість загального пакета MySQL-сервера.

Вчора я встановив Django і створив свій перший проект під назвою firstweb . Я ще не змінив жодних налаштувань.

Ось моя перша велика плутанина. У підручнику я стежив за тим, щоб хлопець встановив Джанго, розпочав свій перший проект, перезапустив Apache, і Джанго просто працював з цього моменту. Він зайшов до свого браузера і без проблем зайшов на сторінку Django за замовчуванням.

Мені, однак, я повинен вписатись у свою папку firstweb і запустити

python manage.py runserver myip:port

І це працює. Нема проблем. Але мені цікаво, чи слід працювати так, і чи це спричинить проблеми внизу?

Друге моє запитання : я хочу його встановити, щоб він використовував мою базу даних MySQL. Я заходжу в свої settings.py під / firstweb / firstweb і бачу ENGINE та NAME, але я не впевнений, що тут помістити.

І тоді в зонах USER, PASSWORD та HOST це моя база даних та її облікові дані? Якщо я використовую localhost, чи можу я просто помістити localhost у зоні HOST?


Примітка: з 01/2016 не існує драйвера MySQL для python 3.5.x. Дивіться stackoverflow.com/questions/34456770/… Тому використовуйте лише до Python 3.4. Ви все ще можете використовувати Django 1.9 (останній стабільний реліз станом на 01/2016).
Томаш Тінтера

Відповіді:


316

Підтримку MySQL додати просто. У вашому DATABASESсловнику ви матимете такий запис:

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

Також у вас є можливість використовувати файли опцій MySQL , починаючи з Django 1.7. Ви можете досягти цього, встановивши свій DATABASESмасив так:

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

Також потрібно створити /path/to/my.cnfфайл із подібними налаштуваннями зверху

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

При новому способі підключення в Django 1.7 важливо знати, що встановлені з'єднання для замовлення:

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

Іншими словами, якщо ви встановите ім’я бази даних в ОПЦІЇ, це матиме перевагу над NAME, що замінить що-небудь у файлі параметрів MySQL.


Якщо ви просто тестуєте свою програму на локальній машині, ви можете використовувати її

python manage.py runserver

Додавання ip:portаргументу дозволяє іншим, ніж власним, машинам отримати доступ до вашої програми розробки. Після того, як ви будете готові розгорнути свою програму, рекомендую ознайомитись з розділом про розгортання Django в djangobook

Набір символів Mysql за замовчуванням часто не є utf-8, тому переконайтеся, що створіть свою базу даних за допомогою цього sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Якщо ви використовуєте роз'єм MySQL Oracle, ваша ENGINEлінія повинна виглядати приблизно так:

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

Зауважте, що спочатку вам потрібно буде встановити mysql на вашу ОС.

brew install mysql (MacOS)

Крім того, клієнтський пакет mysql змінено на python 3 ( MySQL-Clientпрацює лише для python 2)

pip3 install mysqlclient

26

До перших, будь ласка, запустіть команди нижче, щоб встановити залежності python, інакше команда python runserver призведе до помилки.

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

Потім налаштуйте файл settings.py, як визначено #Andy, і при останньому виконанні:

python manage.py runserver

Весело .. !!


18

Якщо ви використовуєте python3.x, тоді запустіть команду нижче

pip install mysqlclient

Потім змініть налаштування.py, як

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }

1
Я використовую virtualenv з python 3.6. Це рятує моє життя. Дякую. Також пам’ятайте, що спочатку створити БД у mysql
Фред

15

Як було сказано вище, ви можете легко встановити xampp спочатку з https://www.apachefriends.org/download.html Потім виконайте вказівки:

  1. Встановіть та запустіть xampp з http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , а потім запустіть веб-сервер Apache та базу даних MySQL з графічного інтерфейсу.
  2. Ви можете налаштувати свій веб-сервер за своїм бажанням, але за замовчуванням веб-сервер знаходиться на http://localhost:80базі даних port 3306, а PhpMyadmin наhttp://localhost/phpmyadmin/
  3. Звідси ви можете бачити свої бази даних та отримувати доступ до них за допомогою дуже доброзичливого графічного інтерфейсу.
  4. Створіть будь-яку базу даних, яку ви хочете використовувати у своєму проекті Django.
  5. Відредагуйте settings.pyфайл так:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Встановіть такі пакети у virtualenv (якщо ви використовуєте django на virtualenv, який є більш кращим):

    sudo apt-get install libmysqlclient-dev

    pip встановити MySQL-python

  7. Це воно!! ви налаштували Django за допомогою MySQL дуже простим способом.

  8. Тепер запустіть проект Django:

    python Manag.py мігрувати

    python Manag.py runserver


7

Насправді існує багато проблем із різними середовищами, версіями python тощо. Можливо, вам також знадобиться встановити файли розробки python, так що для "грубої сили" установки я запустив би все це:

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

Вам слід добре піти з прийнятою відповіддю. І ви можете видалити непотрібні пакунки, якщо це важливо для вас.


7

Виконайте ці команди

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

Потім налаштуйте settings.py, як

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

Насолоджуйтесь з'єднанням mysql


4

Відповідь Енді допомагає, але якщо ви маєте занепокоєння щодо викриття пароля бази даних у налаштуваннях вашого django, я пропоную дотримуватися офіційної конфігурації django на з'єднанні mysql: https://docs.djangoproject.com/en/1.7/ref/databases/

Цитується тут як:

# 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

Щоб замінити "HOST": "127.0.0.1" у налаштуванні, просто додайте його в my.cnf:

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

Інший варіант, який є корисним, полягає у встановленні двигуна пам’яті для джанго.

'OPTIONS': {
   'init_command': 'SET storage_engine=INNODB',
}

4

settings.py

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

}

тоді:

python manage.py migrate

якщо успіх створить тези тез:

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

і ви можете використовувати mysql.

це приклад вітрини, тест на версію Django версії 1.11.5: Django-pool-showcase


3
  1. Встановити mysqlclient

sudo pip3 install mysqlclient

якщо ви отримаєте помилку:

Не вдалося виконати команду "python setup.py egg_info" з кодом помилки 1 в / tmp / pip-install-dbljg4tx / mysqlclient /

тоді:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Змініть 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',"},
        }
    }

1

Виконайте наведені дії, щоб налаштувати його на використання бази даних 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

0

Спершу потрібно створити базу даних MySQL. Потім перейдіть до settings.pyфайлу та відредагуйте 'DATABASES'словник за допомогою своїх облікових даних 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',
 }
}

Ось повне керівництво по встановленню для налаштування Django для використання MySQL на virtualenv:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.