Django Database Connection

   อัปเดตล่าสุด Feb. 9, 2024

เมื่อสร้าง model เรียบร้อยแล้ว จากนั้นจะเป็นการคอนฟิกฐานข้อมูล โดยเราใช้ตัว default database ที่มีมาให้ใน Django เรียบร้อยนั่นก็คือ SQLite ซึ่งเมื่อทำการ migrate  จะได้ไฟล์ db.sqlite3  ซึ่งเก็บข้อมูลในรูปแบบ text file

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


รีจิสเตอร์ Django App 

ทำการรีจิสเตอร์แอพโดยไปที่ settings.py  ในตัวแปร INSTALLED_APPS  ทำการเพิ่มแอพ  blog  เข้าไป

Note: เวลาเราเพิ่มแอพเข้ามาในโปรเจคท์ จะต้องมารีจิสเตอร์แอพของเราที่ตัวแปรนี้ทุกครั้ง

# mysite/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # New
]


migration ฐานข้อมูล

ตอนนี้ใน Django project ของเรามีตารางต่าง ๆ ที่ใช้เก็บข้อมูลในแอพของเราพร้อมใช้แล้ว แต่ว่าตารางเหล่านี้จะยังไม่ได้อยู่ในฐานข้อมูลจริง ๆ และยังใช้งานไม่ได้ คราวนี้ก็จะเป็นขั้นตอนที่เรียกว่า "Migrations" และ "Migrate" ถ้าแปลแบบดิบ ๆ คือเราจะอพยพฐานข้อมูลของเราจากโค้ดเข้าไปในฐานข้อมูลจริง ๆ ให้เราได้ใช้

โดย Django จะมี 2 คำสั่้งในขั้นตอนนี้คือ

  • Migrations: คือการอัปเดตฐานข้อมูลให้เป็นปัจจุบัน (แต่ตอนนี้ข้อมูลยังไม่ได้อัปเดตในฐานข้อมูล)
  • Migrate: คือการส่งฐานข้อมูลของเราไปอัปเดตที่ฐานข้อมูลจริง ๆ


จากนั้นรันคำสั่งเพื่ออัพเดตฐานข้อมูล โดยใช้คำสั่ง  makemigrations  

$ python manage.py makemigrations


ขั้นตอนสุดท้ายคือ  migrate 

$ python manage.py migrate

เป็นอันเสร็จสิ้นขั้นตอนในส่วนของ Database 


Migrations ไฟล์ 

จะเห็นว่าในโฟลเดอร์ blog > migrations จะมีไฟล์ที่ชื่อ  migrations/0001_initial.py 

# Generated by Django 4.1.6 on 2024...

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Post',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=80)),
('body', models.TextField()),
('date_created', models.DateTimeField()),
('date_updated', models.DateTimeField()),
],
),
]

โดยเป็นไฟล์ที่บอก transaction ว่า ในตารางนี้มีการเปลี่ยนแปลงอะไรบ้าง ซึ่ง 0001_initial จะเป็นไฟล์แรกสุดเมื่อเราได้ทำการ makemigrations และ migrate ครั้งแรก




คอร์สเรียนแนะนำ