Konfiguracja Django do korzystania z MySQL


171

Chcę trochę odejść od PHP i nauczyć się Pythona. Aby tworzyć strony internetowe w Pythonie, będę potrzebować frameworka pomagającego w tworzeniu szablonów i innych rzeczach.

Mam nieprodukcyjny serwer, którego używam do testowania wszystkich rzeczy związanych z tworzeniem stron internetowych. Jest to stos LAMP Debiana 7.1, który uruchamia MariaDB zamiast zwykłego pakietu serwera MySQL.

Wczoraj zainstalowałem Django i stworzyłem swój pierwszy projekt o nazwie firstweb . Nie zmieniłem jeszcze żadnych ustawień.

Oto mój pierwszy duży błąd. W samouczku śledziłem, jak facet zainstalował Django, uruchomiłem swój pierwszy projekt, zrestartowałem Apache i od tego momentu Django po prostu pracował. Poszedł do swojej przeglądarki i przeszedł do domyślnej strony Django bez żadnych problemów.

Ja jednak muszę przejść do mojego pierwszego folderu internetowego i uruchomić

python manage.py runserver myip:port

I to działa. Nie ma problemu. Ale zastanawiam się, czy ma tak działać i czy spowoduje to problemy?

Moje drugie pytanie dotyczy tego, że chcę go skonfigurować tak, aby korzystał z mojej bazy danych MySQL. Wchodzę do mojego settings.py pod / firstweb / firstweb i widzę SILNIK i NAZWĘ, ale nie jestem pewien, co tu wpisać.

Czy w obszarach UŻYTKOWNIKA, HASŁO i HOSTA jest to moja baza danych i jej dane uwierzytelniające? Jeśli używam localhost, czy mogę po prostu umieścić localhost w obszarze HOST?


Uwaga: od 01/2016 nie ma sterownika MySQL dla Pythona 3.5.x. Zobacz stackoverflow.com/questions/34456770/… Więc używaj tylko do wersji Python 3.4. Nadal możesz używać Django 1.9 (najnowsza stabilna wersja z 01/2016).
Tomas Tintera,

Odpowiedzi:


316

Obsługa MySQL jest łatwa do dodania. W swoim DATABASESsłowniku będziesz mieć taki wpis:

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

Masz również możliwość wykorzystania plików opcji MySQL , począwszy od Django 1.7. Możesz to osiągnąć, ustawiając DATABASEStablicę w następujący sposób:

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

Musisz także utworzyć /path/to/my.cnfplik z podobnymi ustawieniami z góry

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

W przypadku tej nowej metody łączenia w Django 1.7, ważne jest, aby wiedzieć, że połączenia są ustanawiane w kolejności:

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

Innymi słowy, jeśli ustawisz nazwę bazy danych w OPCJACH, będzie to miało pierwszeństwo przed NAZWĄ, która nadpisałaby wszystko w pliku opcji MySQL.


Jeśli tylko testujesz aplikację na komputerze lokalnym, możesz użyć

python manage.py runserver

Dodanie ip:portargumentu umożliwia maszynom innym niż Twój dostęp do aplikacji programistycznej. Gdy będziesz gotowy do wdrożenia aplikacji, polecam zajrzeć do rozdziału Wdrażanie Django na djangobook

Domyślny zestaw znaków MySQL często nie jest utf-8, dlatego pamiętaj, aby utworzyć bazę danych za pomocą tego sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Jeśli używasz złącza MySQL Oracle twoja ENGINElinia powinna wyglądać tak:

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

Zauważ, że najpierw musisz zainstalować mysql w swoim systemie operacyjnym.

brew install mysql (MacOS)

Ponadto pakiet klienta mysql zmienił się dla Pythona 3 ( MySQL-Clientdziała tylko dla Pythona 2)

pip3 install mysqlclient

26

Najpierw uruchom poniższe polecenia, aby zainstalować zależności Pythona, w przeciwnym razie polecenie uruchomieniowy Pythona zgłosi błąd.

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

Następnie skonfiguruj plik settings.py zgodnie z definicją #Andy i przy ostatnim uruchomieniu:

python manage.py runserver

Baw się dobrze..!!


18

Jeśli używasz python3.x, uruchom poniższe polecenie

pip install mysqlclient

Następnie zmień setting.py jak

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

1
Używam virtualenv z Pythonem 3.6. To ratuje mi życie. Dziękuję Ci. Pamiętaj też, aby najpierw utworzyć bazę danych w mysql
Fred

15

Jak wszystko zostało powiedziane powyżej, możesz łatwo najpierw zainstalować xampp z https://www.apachefriends.org/download.html Następnie postępuj zgodnie z instrukcjami:

  1. Zainstaluj i uruchom xampp z http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , a następnie uruchom Apache Web Server i MySQL Database z GUI.
  2. Możesz skonfigurować swój serwer WWW, jak chcesz, ale domyślnie serwer WWW znajduje się pod adresem, http://localhost:80a baza danych znajduje się w port 3306, a PhpMyadmin pod adresemhttp://localhost/phpmyadmin/
  3. Stąd możesz przeglądać swoje bazy danych i uzyskiwać do nich dostęp za pomocą bardzo przyjaznego GUI.
  4. Utwórz dowolną bazę danych, której chcesz użyć w swoim projekcie Django.
  5. Edytuj swój settings.pyplik na przykład:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Zainstaluj następujące pakiety w virtualenv (jeśli używasz django na virtualenv, co jest bardziej preferowane):

    sudo apt-get install libmysqlclient-dev

    pip zainstaluj MySQL-python

  7. Otóż ​​to!! skonfigurowałeś Django z MySQL w bardzo łatwy sposób.

  8. Teraz uruchom swój projekt Django:

    python manage.py migrate

    python manage.py runerver


7

W rzeczywistości istnieje wiele problemów z różnymi środowiskami, wersjami Pythona i tak dalej. Konieczne może być również zainstalowanie plików deweloperskich Pythona, więc aby `` brutalnie '' przeprowadzić instalację, uruchomiłbym wszystkie poniższe:

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

Powinieneś być dobry i przyjąć zaakceptowaną odpowiedź. I może usunąć niepotrzebne pakiety, jeśli jest to dla Ciebie ważne.


7

Uruchom te polecenia

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

Następnie skonfiguruj settings.py jak

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

Ciesz się połączeniem mysql


4

Odpowiedź Andy'ego pomaga, ale jeśli masz obawy dotyczące ujawnienia hasła do bazy danych w ustawieniach django, sugeruję postępować zgodnie z oficjalną konfiguracją django na połączeniu mysql: https://docs.djangoproject.com/en/1.7/ref/databases/

Cytowany tutaj jako:

# 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

Aby zamienić „HOST”: „127.0.0.1” w ustawieniach, po prostu dodaj go do my.cnf:

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

Inną opcją, która jest przydatna, jest ustawienie silnika pamięci masowej na django, możesz go umieścić w swoim setting.py:

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

}

następnie:

python manage.py migrate

jeśli sukces wygeneruje te tabele:

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

i będziesz mógł użyć mysql.

to jest przykład pokazowy, test na Django w wersji 1.11.5: Django-pool-showcase


3
  1. zainstalować mysqlclient

sudo pip3 install mysqlclient

jeśli pojawi się błąd:

Polecenie „python setup.py egg_info” nie powiodło się. Kod błędu 1 w / tmp / pip-install-dbljg4tx / mysqlclient /

następnie:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Zmodyfikuj 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

Wykonaj podane kroki, aby skonfigurować go do korzystania z bazy danych 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

Najpierw musisz utworzyć bazę danych MySQL. Następnie przejdź do settings.pypliku i edytuj 'DATABASES'słownik za pomocą danych logowania 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',
 }
}

Oto kompletny przewodnik instalacji dotyczący konfiguracji Django do korzystania z MySQL na virtualenv:

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.