การตั้งค่า Django เพื่อใช้งาน MySQL


171

ฉันต้องการย้ายออกจาก PHP เพียงเล็กน้อยและเรียนรู้ Python ในการพัฒนาเว็บไซต์ด้วย Python ฉันจะต้องมีกรอบการทำงานเพื่อช่วยในการสร้างเทมเพลตและอื่น ๆ

ฉันมีเซิร์ฟเวอร์ที่ไม่ได้ใช้งานจริงซึ่งฉันใช้ทดสอบสิ่งต่างๆในการพัฒนาเว็บทั้งหมด มันเป็น Debian 7.1 LAMP stack ที่รัน MariaDB แทนแพ็คเกจ MySQL-server ทั่วไป

เมื่อวานนี้ผมติดตั้ง Django และสร้างโครงการแรกของฉันเรียกว่าfirstweb ฉันยังไม่ได้เปลี่ยนการตั้งค่าใด ๆ

นี่คือความสับสนชิ้นใหญ่ชิ้นแรกของฉัน ในแบบฝึกหัดที่ฉันติดตามคนที่ติดตั้ง Django เริ่มโครงการแรกของเขาเริ่ม Apache ใหม่และ Django เพิ่งทำงานตั้งแต่นั้นมา เขาไปที่เบราว์เซอร์ของเขาและไปที่หน้าเริ่มต้น Django โดยไม่มีปัญหา

ฉัน แต่ฉันต้องซีดีลงในโฟลเดอร์แรกของฉันและเรียกใช้

python manage.py runserver myip:port

และมันใช้งานได้ ไม่มีปัญหา. แต่ฉันสงสัยว่ามันควรจะทำงานแบบนี้หรือไม่และถ้านี่จะทำให้เกิดปัญหาหรือไม่

คำถามที่สองของฉันคือฉันต้องการตั้งค่าเพื่อใช้ฐานข้อมูล MySQL ของฉัน ฉันไปที่ settings.py ภายใต้ / firstweb / firstweb และฉันเห็น ENGINE และ NAME แต่ฉันไม่แน่ใจว่าจะใส่อะไรที่นี่

แล้วในพื้นที่ผู้ใช้รหัสผ่านและโฮสต์นี่คือฐานข้อมูลและข้อมูลประจำตัวของฉันหรือไม่ หากฉันใช้localhostฉันสามารถใส่localhostในพื้นที่ HOST ได้หรือไม่


หมายเหตุ: ตั้งแต่วันที่ 01/2016 ไม่มีไดรเวอร์ MySQL สำหรับ python 3.5.x ดูstackoverflow.com/questions/34456770/…ดังนั้นใช้ Python มากถึง 3.4 คุณยังสามารถใช้ Django 1.9 (รุ่นเสถียรล่าสุด ณ วันที่ 01/2016)
Tomas Tintera

คำตอบ:


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.

กล่าวอีกนัยหนึ่งถ้าคุณตั้งชื่อของฐานข้อมูลใน OPTIONS สิ่งนี้จะมีความสำคัญมากกว่า NAME ซึ่งจะแทนที่สิ่งใด ๆ ในไฟล์ตัวเลือก MySQL


หากคุณเป็นเพียงการทดสอบแอปพลิเคชันของคุณบนเครื่องท้องถิ่นคุณสามารถใช้

python manage.py runserver

การเพิ่มip:portอาร์กิวเมนต์อนุญาตให้เครื่องอื่นนอกเหนือจากของคุณเองสามารถเข้าถึงแอปพลิเคชันการพัฒนา เมื่อคุณพร้อมที่จะปรับใช้แอปพลิเคชันของคุณฉันแนะนำให้ดูที่บทการปรับใช้ Djangoบนdjangobook

ชุดอักขระเริ่มต้น Mysql มักจะไม่ใช่ utf-8 ดังนั้นโปรดสร้างฐานข้อมูลของคุณโดยใช้ sql นี้:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

หากคุณใช้ตัวเชื่อมต่อ MySQL ของ OracleENGINEบรรทัดของคุณควรมีลักษณะดังนี้:

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

โปรดทราบว่าคุณจะต้องติดตั้ง mysql บนระบบปฏิบัติการของคุณก่อน

brew install mysql (MacOS)

นอกจากนี้แพ็คเกจไคลเอนต์ mysql ก็เปลี่ยนไปเป็น python 3 ( MySQL-Clientใช้ได้กับ python 2 เท่านั้น)

pip3 install mysqlclient

26

ในตอนแรกโปรดเรียกใช้คำสั่งด้านล่างเพื่อติดตั้งการพึ่งพาของไพ ธ อนมิฉะนั้นคำสั่งของ python รันเซอร์เวอร์จะผิดพลาด

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

จากนั้นกำหนดค่าไฟล์ settings.py ตามที่กำหนดโดย #Andy และในขั้นตอนสุดท้าย:

python manage.py runserver

มีความสุข..!!


18

หากคุณใช้ python3.x ให้รันคำสั่งด้านล่าง

pip install mysqlclient

จากนั้นเปลี่ยนการตั้งค่าเช่น

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

1
ฉันใช้ virtualenv กับ python 3.6 สิ่งนี้ช่วยชีวิตฉันได้ ขอบคุณ. นอกจากนี้อย่าลืมสร้าง DB ใน mysql ก่อน
Fred

15

ตามที่กล่าวไว้ข้างต้นคุณสามารถติดตั้ง xampp ได้อย่างง่ายดายจากhttps://www.apachefriends.org/download.html จากนั้นทำตามคำแนะนำดังนี้:

  1. ติดตั้งและเรียกใช้ xampp จากhttp://www.unixmen.com/install-xampp-stack-ubuntu-14-04/จากนั้นเริ่ม Apache เว็บเซิร์ฟเวอร์และฐานข้อมูล MySQL จาก GUI
  2. คุณสามารถกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณได้ตามที่คุณต้องการ แต่โดยค่าเริ่มต้นคือเว็บเซิร์ฟเวอร์http://localhost:80และฐานข้อมูลที่port 3306และ PhpMyadmin ที่http://localhost/phpmyadmin/
  3. จากที่นี่คุณสามารถดูฐานข้อมูลของคุณและเข้าถึงได้โดยใช้ GUI ที่เป็นมิตรมาก
  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 Manage.py โยกย้าย

    หลาม Manage.py Runserver


7

ที่จริงแล้วมีปัญหามากมายกับสภาพแวดล้อมที่แตกต่างกันรุ่นหลามและอื่น ๆ คุณอาจต้องติดตั้งไฟล์ python dev เพื่อ 'brute-force' การติดตั้งฉันจะเรียกใช้ทั้งหมดเหล่านี้:

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

คำตอบของ Andy ช่วย แต่ถ้าคุณกังวลเกี่ยวกับการเปิดเผยรหัสผ่านฐานข้อมูลของคุณในการตั้งค่า django ของฉันฉันแนะนำให้ปฏิบัติตามการกำหนดค่าอย่างเป็นทางการ django ในการเชื่อมต่อ mysql: https://docs.djangoproject.com/en/1.7/ref/database/

ยกมาที่นี่เป็น:

# 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

อีกทางเลือกที่มีประโยชน์คือการตั้งค่าเครื่องมือเก็บข้อมูลของคุณสำหรับ django คุณอาจต้องการมันใน 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,
    },
}

}

แล้ว:

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/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.