ในบทนี้เราจะลองเชื่อมต่อฐานข้อมูล MySQL เข้ากับโปรเจ็ค Django ที่เรากำลังสร้างอยู่ ซึ่งจริงๆแล้วใน Django framework มันมาพร้อมกับ default ฐานข้อมูลที่ชื่อว่า SQLite ซึ่งมันก็ดี แต่มันเหมาะกับโปรเจ็คที่ไม่ได้ต้องการเก็บข้อมูลเยอะๆ ไม่ซับซ้อน ซึ่ง MySQL ได้รับความนิยมกว่ามาก เพราะงั้นหากเรียน MySQL ไปเลยน่าจะดีกว่า

MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์แบบ open-source ที่ได้รับความนิยมมากที่สุด โดย MySQL server อนุญาตให้เราสร้างบัญชีผู้ใช้จำนวนมากและให้สิทธิ์ที่เหมาะสมเพื่อให้ผู้ใช้สามารถเข้าถึงและจัดการฐานข้อมูลได้

*บทนี้เราจะเขียนเฉพาะการเชื่อมต่อฐานข้อมูล MySQL เข้ากับ Django โปรเจ็คเท่านั้น เพราะงั้นคนที่จะลองทำตามบทความนี้ดูควรมี MySQL ติดตั้งไว้ในเครื่องแล้ว*

ติดตั้ง MySQL Database Connector

connector ตัวนี้ชื่อ mysqlclient เราจะติดตั้งโดยใช้ pip

% pip install mysqlclient

เข้าสู่ระบบ MySQL shell

% mysql -u root -p

จากนั้นเราจะต้องใส่รหัสผ่านและกด enter หรือ return

สร้าง ฐานข้อมูลอันใหม่

ก่อนจะติดตั้งฐานข้อมูล เราก็ต้องมีฐานข้อมูลเพื่อเอาไปติดตั้งก่อน ให้ใช้คำสั่งต่อไปนี้

mysql> CREATE DATABASE project_database;

project_database คือชื่อฐานข้อมูลโปรเจ็ค เราต้องตั้งชื่อฐานข้อมูลนั้นว่าเราจะเรียกมันว่าอะไร

สร้างบัญชีผู้ใช้งานและรหัสผ่าน

mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';

ในช่อง user ให้ใส่ ชื่อ user name ที่เราต้องการ ส่วน password ก็ให้ใส่ password

หากพบปัญหา หรือ สร้างไม่ได้ ให้ลองสร้างแบบข้างล่างนี้แทน

mysql> CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Grant Privileges

คือการให้สิทธิ์บัญชี MySQL นั้นๆสามารถเข้า manipulate ฐานข้อมูลได้ ในที่นี้เราจะให้สิทธิ์ user ที่เราสร้างขึ้นมาเข้า manipulate ฐานข้อมูลสำหรับโปรเจ็คของเรา

mysql> GRANT ALL PRIVILEGES ON project_database.* TO 'user'@'localhost';

project_database คือชื่อฐานข้อมูลโปรเจ็ค และ user คือชื่อ user name ที่เราตั้งไปเมื่อครู่นี้

ต่อมาใช้คำสั่งต่อไปนี้

mysql> FLUSH PRIVILEGES;

ตั้งค่า Django ให้ใช้ MySQL

เปิด ไฟล์ settings.py ใน Django โปรเจ็ค ดูที่ DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

ให้คัดลอกโค๊ดด้านล่างนี้แล้วใส่แทนโค๊ดด้านบนนี้ทั้งหมด

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'project_database',
        'USER': 'user',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

ให้แก้ชื่อฐานข้อมูลโปรเจ็ค, user name และ password ให้ตรงกับที่เราสร้าง ส่วน port ส่วนใหญ่มันจะอยู่ที่ 3306 อยู่แล้ว หากไม่ใช่ ให้ลองเข้าไปดู MySQL Connections ใน MySQL Workbench มันจะบอกว่า port ของ local instance คือ port หมายเลขอะไร

make migrate

เป็นการย้ายตาราง Django เริ่มต้นทั้งหมดไปยัง schema ของ MySQL

% python3 manage.py migrate

สร้าง superuser เพื่อใช้หน้า admin

Django จะมีหน้า admin ที่ให้เราจัดการฐานข้อมูลอย่างง่ายได้ หากรัน server แล้ว ให้พิมพ์ http://127.0.0.1:8000/admin/ เราจะได้หน้าต่อไปนี้

เราจำเป็นต้องสร้างบัญชีแอดมินขึ้นมา

% python3 manage.py createsuperuser

ขั้นตอนต่อไปคือการกรอกชื่อ user (มันจะแนะนำชื่อ user ที่เราตั้งไว้มาให้ หากเราต้องการใช้ชื่อ user name ที่เราตั้งไว้ให้กด enter ไปเลย

ต่อไปจะต้องกรอกอีเมล และรหัสผ่าน

จากนี้หากเราเข้าไปที่หน้า admin ของ Django เราจะสามารถใส่ username และ password เพื่อเข้าสู่ระบบได้