Einrichten von Django für die Verwendung von MySQL

171

Ich möchte mich ein wenig von PHP entfernen und Python lernen. Um Webentwicklung mit Python durchführen zu können, benötige ich ein Framework, das beim Templating und anderen Dingen hilft.

Ich habe einen Nicht-Produktionsserver, auf dem ich alle Webentwicklungssachen teste. Es ist ein Debian 7.1 LAMP-Stack, auf dem MariaDB anstelle des üblichen MySQL-Server-Pakets ausgeführt wird.

Gestern habe ich Django installiert und mein erstes Projekt namens firstweb erstellt . Ich habe noch keine Einstellungen geändert.

Hier ist meine erste große Verwirrung. Im Tutorial folgte ich dem Typ, der Django installiert hatte, startete sein erstes Projekt, startete Apache neu und Django arbeitete von da an. Er ging zu seinem Browser und ging ohne Probleme zur Django-Standardseite.

Ich muss jedoch in meinen ersten Webordner cd und ausführen

python manage.py runserver myip:port

Und es funktioniert. Kein Problem. Aber ich frage mich, ob es so funktionieren soll und ob dies später zu Problemen führen wird.

Meine zweite Frage ist, dass ich es so einrichten möchte, dass es meine MySQL-Datenbank verwendet. Ich gehe in meine settings.py unter / firstweb / firstweb und sehe ENGINE und NAME, bin mir aber nicht sicher, was ich hier einfügen soll.

Und dann ist dies in den Bereichen USER, PASSWORD und HOST meine Datenbank und ihre Anmeldeinformationen? Wenn ich localhost verwende, kann ich localhost einfach in den HOST-Bereich stellen?

Gregor
quelle
Hinweis: Zum 01.01.2016 gibt es keinen MySQL-Treiber für Python 3.5.x. Siehe stackoverflow.com/questions/34456770/… Verwenden Sie also nur bis zu Python 3.4. Sie können weiterhin Django 1.9 verwenden (neueste stabile Version ab 01/2016).
Tomas Tintera

Antworten:

316

Die MySQL-Unterstützung ist einfach hinzuzufügen. In Ihrem DATABASESWörterbuch haben Sie einen Eintrag wie folgt:

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

Ab Django 1.7 haben Sie auch die Möglichkeit, MySQL- Optionsdateien zu verwenden . Sie können dies erreichen, indem Sie Ihr DATABASESArray folgendermaßen einstellen :

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

Sie müssen die /path/to/my.cnfDatei auch mit ähnlichen Einstellungen von oben erstellen

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

Bei dieser neuen Verbindungsmethode in Django 1.7 ist es wichtig zu wissen, dass die Reihenfolge der Verbindungen hergestellt ist:

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

Mit anderen Worten, wenn Sie den Namen der Datenbank in OPTIONS festlegen, hat dies Vorrang vor NAME, wodurch alles in einer MySQL-Optionsdatei überschrieben wird.


Wenn Sie Ihre Anwendung nur auf Ihrem lokalen Computer testen, können Sie sie verwenden

python manage.py runserver

Durch Hinzufügen des ip:portArguments können andere als Ihre eigenen Computer auf Ihre Entwicklungsanwendung zugreifen. Wenn Sie bereit sind, Ihre Anwendung bereitzustellen , empfehlen wir Ihnen, das Kapitel zum Bereitstellen von Django im Djangobook zu lesen

Der MySQL-Standardzeichensatz ist häufig nicht utf-8. Stellen Sie daher sicher, dass Sie Ihre Datenbank mit diesem SQL erstellen:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Wenn Sie den MySQL-Connector von Oracle verwenden,ENGINE sollte Ihre Leitung folgendermaßen aussehen:

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

Beachten Sie, dass Sie zuerst MySQL auf Ihrem Betriebssystem installieren müssen.

brew install mysql (MacOS)

Außerdem wurde das MySQL-Client-Paket für Python 3 geändert ( MySQL-Clientfunktioniert nur für Python 2).

pip3 install mysqlclient
Andy
quelle
26

Führen Sie zum ersten Mal die folgenden Befehle aus, um Python-Abhängigkeiten zu installieren. Andernfalls wird der Befehl Python Runserver einen Fehler auslösen.

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

Konfigurieren Sie dann die Datei settings.py wie von #Andy definiert und führen Sie sie zuletzt aus:

python manage.py runserver

Habe Spaß..!!

Ritesh
quelle
18

Wenn Sie python3.x verwenden, führen Sie den folgenden Befehl aus

pip install mysqlclient

Dann ändern Sie settings.py wie

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }
Manoj Jadhav
quelle
1
Ich verwende virtualenv mit Python 3.6. Das rettet mein Leben. Danke dir. Denken Sie auch daran, zuerst DB in MySQL zu erstellen
Fred
15

Wie oben erwähnt, können Sie xampp einfach zuerst unter https://www.apachefriends.org/download.html installieren. Befolgen Sie dann die Anweisungen wie folgt:

  1. Installieren Sie xampp und führen Sie es unter http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ aus . Starten Sie dann Apache Web Server und MySQL Database über die GUI.
  2. Sie können Ihren Webserver nach Ihren Wünschen konfigurieren, aber standardmäßig befindet sich der Webserver unter http://localhost:80und die Datenbank unter port 3306und PhpMyadmin unterhttp://localhost/phpmyadmin/
  3. Von hier aus können Sie Ihre Datenbanken anzeigen und über eine sehr benutzerfreundliche Benutzeroberfläche darauf zugreifen.
  4. Erstellen Sie eine beliebige Datenbank, die Sie für Ihr Django-Projekt verwenden möchten.
  5. Bearbeiten Sie Ihre settings.pyDatei wie folgt :

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Installieren Sie die folgenden Pakete in virtualenv (wenn Sie django auf virtualenv verwenden, was bevorzugter ist):

    sudo apt-get install libmysqlclient-dev

    pip installiere MySQL-Python

  7. Das ist es!! Sie haben Django auf sehr einfache Weise mit MySQL konfiguriert.

  8. Führen Sie nun Ihr Django-Projekt aus:

    python manage.py migrieren

    python manage.py runserver

Wurzel
quelle
7

Tatsächlich gibt es viele Probleme mit verschiedenen Umgebungen, Python-Versionen usw. Möglicherweise müssen Sie auch Python-Entwicklungsdateien installieren. Um die Installation zu erzwingen, würde ich all diese ausführen:

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

Sie sollten gut mit der akzeptierten Antwort umgehen können. Und kann die unnötigen Pakete entfernen, wenn das für Sie wichtig ist.

mimoralea
quelle
7

Führen Sie diese Befehle aus

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

Dann konfigurieren Sie settings.py wie

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

Genießen Sie MySQL-Verbindung

Deepak Kumar
quelle
4

Andys Antwort hilft, aber wenn Sie Bedenken haben, Ihr Datenbankkennwort in Ihrer Django-Einstellung offenzulegen, empfehle ich, die offizielle Konfiguration von Django für die MySQL-Verbindung zu befolgen: https://docs.djangoproject.com/de/1.7/ref/databases/

Zitiert hier als:

# 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

Um 'HOST': '127.0.0.1' in der Einstellung zu ersetzen, fügen Sie es einfach in my.cnf hinzu:

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

Eine weitere nützliche OPTION besteht darin, Ihre Speicher-Engine für Django festzulegen. Möglicherweise möchten Sie sie in Ihrer Einstellung.py:

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

settings.py

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

}}

dann:

python manage.py migrate

Wenn der Erfolg diese Tabellen generiert:

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

und du wirst MySQL verwenden können.

Dies ist ein Beispiel für ein Schaufenster, Test auf Django Version 1.11.5: Django-Pool-Schaufenster

LuciferJack
quelle
3
  1. Installieren mysqlclient

sudo pip3 install mysqlclient

Wenn Sie eine Fehlermeldung erhalten:

Der Befehl "python setup.pygg_info" ist mit Fehlercode 1 in / tmp / pip-install-dbljg4tx / mysqlclient / fehlgeschlagen.

dann:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Ändern Sie 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
quelle
1

Befolgen Sie die angegebenen Schritte, um es für die Verwendung der MySQL-Datenbank einzurichten:

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
quelle
0

Sie müssen zuerst eine MySQL-Datenbank erstellen. Gehen Sie dann zur settings.pyDatei und bearbeiten Sie das 'DATABASES'Wörterbuch mit Ihren MySQL-Anmeldeinformationen:

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

Hier ist eine vollständige Installationsanleitung zum Einrichten von Django für die Verwendung von MySQL auf einer virtuellen Umgebung:

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

Sibi M.
quelle