Pengaturan Django untuk menggunakan MySQL

171

Saya ingin pindah sedikit dari PHP dan belajar Python. Untuk melakukan pengembangan web dengan Python saya akan membutuhkan kerangka kerja untuk membantu dengan templating dan hal-hal lain.

Saya memiliki server non-produksi yang saya gunakan untuk menguji semua hal pengembangan web. Ini adalah tumpukan LAM Debian 7.1 yang menjalankan MariaDB bukan paket MySQL-server umum.

Kemarin saya menginstal Django dan membuat proyek pertama saya yang disebut firstweb . Saya belum mengubah pengaturan apa pun.

Ini adalah kebingungan besar pertama saya. Dalam tutorial saya mengikuti orang itu menginstal Django, memulai proyek pertamanya, me-restart Apache, dan Django baru bekerja sejak saat itu. Dia pergi ke browser-nya dan pergi ke halaman default Django tanpa masalah.

Namun saya, saya harus cd ke folder web pertama saya dan jalankan

python manage.py runserver myip:port

Dan itu berhasil. Tidak masalah. Tapi saya bertanya-tanya apakah itu seharusnya bekerja seperti ini, dan apakah ini akan menyebabkan masalah di telepon?

Pertanyaan kedua saya adalah saya ingin mengaturnya sehingga menggunakan database MySQL saya. Saya masuk ke settings.py saya di bawah / firstweb / firstweb dan saya melihat ENGINE dan NAME tapi saya tidak yakin apa yang harus dimasukkan di sini.

Dan kemudian di area USER, PASSWORD, dan HOST apakah ini basis data dan kredensial saya? Jika saya menggunakan localhost, bisakah saya menempatkan localhost di area HOST?

Gregor
sumber
Catatan: seperti od 01/2016 tidak ada driver MySQL untuk python 3.5.x. Lihat stackoverflow.com/questions/34456770/... Jadi gunakan hanya hingga Python 3.4. Anda masih dapat menggunakan Django 1.9 (rilis stabil terbaru pada 01/2016).
Tomas Tintera

Jawaban:

316

Dukungan MySQL mudah ditambahkan. Di DATABASESkamus Anda, Anda akan memiliki entri seperti ini:

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

Anda juga memiliki opsi untuk menggunakan file opsi MySQL , mulai dari Django 1.7. Anda dapat melakukannya dengan mengatur DATABASESarray seperti:

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

Anda juga perlu membuat /path/to/my.cnffile dengan pengaturan serupa dari atas

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

Dengan metode baru menghubungkan ini di Django 1.7, penting untuk mengetahui koneksi pesanan dibuat:

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

Dengan kata lain, jika Anda menetapkan nama basis data dalam PILIHAN, ini akan lebih diutamakan daripada NAMA, yang akan menimpa apa pun dalam file opsi MySQL.


Jika Anda hanya menguji aplikasi Anda di mesin lokal Anda, Anda dapat menggunakannya

python manage.py runserver

Menambahkan ip:portargumen memungkinkan mesin selain milik Anda untuk mengakses aplikasi pengembangan Anda. Setelah Anda siap untuk menyebarkan aplikasi Anda, saya sarankan untuk melihat bab tentang Menyebarkan Django di djangobook

Kumpulan karakter standar Mysql sering tidak utf-8, karena itu pastikan untuk membuat database Anda menggunakan sql ini:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Jika Anda menggunakan konektor Oracle Oracle,ENGINE baris Anda akan terlihat seperti ini:

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

Perhatikan bahwa Anda harus menginstal mysql terlebih dahulu pada OS Anda.

brew install mysql (MacOS)

Juga, paket klien mysql telah berubah untuk python 3 ( MySQL-Clienthanya berfungsi untuk python 2)

pip3 install mysqlclient
Andy
sumber
26

Untuk yang pertama silakan jalankan perintah di bawah ini untuk menginstal dependensi python jika tidak, perintah python runserver akan melempar kesalahan.

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

Kemudian konfigurasikan file settings.py seperti yang didefinisikan oleh #Andy dan terakhir jalankan:

python manage.py runserver

Selamat bersenang-senang..!!

Ritesh
sumber
18

Jika Anda menggunakan python3.x maka Jalankan perintah di bawah ini

pip install mysqlclient

Kemudian ubah setting.py suka

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }
Manoj Jadhav
sumber
1
Saya menggunakan virtualenv dengan python 3.6. Ini menyelamatkan hidupku. Terima kasih. Juga, ingatlah untuk membuat DB di mysql terlebih dahulu
Fred
15

Seperti semua yang dikatakan di atas, Anda dapat dengan mudah menginstal xampp terlebih dahulu dari https://www.apachefriends.org/download.html Lalu ikuti petunjuknya sebagai:

  1. Instal dan jalankan xampp dari http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , kemudian jalankan Apache Web Server dan Database MySQL dari GUI.
  2. Anda dapat mengkonfigurasi server web Anda seperti yang Anda inginkan tetapi secara default server web ada di http://localhost:80dan database di port 3306, dan PhpMyadmin dihttp://localhost/phpmyadmin/
  3. Dari sini Anda dapat melihat database Anda dan mengaksesnya menggunakan GUI yang sangat ramah.
  4. Buat database apa saja yang ingin Anda gunakan pada Proyek Django Anda.
  5. Edit settings.pyfile Anda seperti:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
    
  6. Instal paket-paket berikut di virtualenv (jika Anda menggunakan Django di virtualenv, yang lebih disukai):

    sudo apt-get install libmysqlclient-dev

    pip instal MySQL-python

  7. Itu dia!! Anda telah mengkonfigurasi Django dengan MySQL dengan cara yang sangat mudah.

  8. Sekarang jalankan proyek Django Anda:

    migrasi python manage.py

    python manage.py runserver

akar
sumber
7

Sebenarnya, ada banyak masalah dengan lingkungan yang berbeda, versi python, dan sebagainya. Anda mungkin juga perlu menginstal file python dev, jadi untuk 'brute-force' instalasi saya akan menjalankan semua ini:

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

Anda harus bersikap baik dengan jawaban yang diterima. Dan dapat menghapus paket yang tidak perlu jika itu penting bagi Anda.

mimoralea
sumber
7

Jalankan perintah ini

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

Kemudian konfigurasikan settings.py suka

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

Nikmati koneksi mysql

Deepak Kumar
sumber
4

Jawaban Andy membantu tetapi jika Anda memiliki kepedulian untuk mengekspos kata sandi database Anda dalam pengaturan Django, saya sarankan untuk mengikuti konfigurasi Django resmi pada koneksi mysql: https://docs.djangoproject.com/en/1.7/ref/databases/

Dikutip di sini sebagai:

# 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

Untuk mengganti 'HOST': '127.0.0.1' di pengaturan, cukup tambahkan di my.cnf:

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

OPSI lain yang berguna, adalah untuk mengatur mesin penyimpanan Anda untuk Django, Anda mungkin ingin itu dalam pengaturan Anda .py:

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

settings.py

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

}

kemudian:

python manage.py migrate

jika sukses akan menghasilkan tabel tesis:

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

dan kamu akan bisa menggunakan mysql.

ini adalah contoh showcase, uji pada Django versi 1.11.5: Django-pool-showcase

LuciferJack
sumber
3
  1. Install mysqlclient

sudo pip3 install mysqlclient

jika Anda mendapatkan kesalahan:

Perintah "python setup.py egg_info" gagal dengan kode kesalahan 1 di / tmp / pip-install-dbljg4tx / mysqlclient /

kemudian:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Ubah pengaturan.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
sumber
1

Ikuti langkah-langkah yang diberikan untuk menyiapkannya menggunakan database 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
sumber
0

Anda harus membuat database MySQL terlebih dahulu. Lalu buka settings.pyfile dan edit 'DATABASES'kamus dengan kredensial MySQL Anda:

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

Berikut ini adalah panduan instalasi lengkap untuk mengatur Django untuk menggunakan MySQL pada virtualenv:

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

Sibi M
sumber