ค้นหาบล็อกนี้

วันอังคารที่ 14 เมษายน พ.ศ. 2558

[Django 1.7.4]วิธีการเปลี่ยนแปลงตารางใน Models

ในการทำงานเราอาจจะพบว่า ตารางสำหรับฐานข้อมูลในไฟล์ Models จำเป็นต้องมีการแก้ไข หรืออาจจะต้องการลบบางแอตทริบิวในตาราง และเมื่อทำการแก้ไขแล้วไม่สามารถทำการรันคำสั่งเพื่อแก้ไขตารางได้ตามวิธีการปกติ ดังนั้นในบทความนี้จะช่วยบอกวิธีการในการแก้ปัญหาเมื่อเราต้องการแก้ไขตารางฐานข้อมูล
ขั้นตอนสำหรับการแก้ไข Models (ถ้าสามารถแก้ไขตารางโดยใช้คำสั่งปกติได้ไม่ต้องทำตามขั้นตอนต่อไปนี้)
  1. ทำการแก้ไขข้อมูลในไฟล์ Models ที่ต้องการ เมื่อเสร็จแล้วทำการรันคำสั่งปกติเพื่อแก้ไขตารางแล้วพบว่ามีการ Error เกิดขึ้น
  2. เข้าไปยังโฟลเดอร์ของ App แล้วเข้าไปยังโฟลเดอร์ migrations โดยในตัวอย่างนี้ใช้ App ชื่อ group3 ดังนั้นจึงเข้าไปยังโฟลเดอร์ group3/migrations แล้วลบไฟล์ที่มีชื่อลักษณะดังนี้
    • 0001_initial.py, 0001_initial.pyc
    • 0002_initial.py, 0002_initial.pyc
    • 0003_initial.py, 0003_initial.pyc
    • ... 
  3. ดาวน์โหลดโปรแกรม SQLite Database Browser ที่นี่
  4. เปิดโปรแกรม SQLite Database Browser เข้าไปที่เมนู File >> Open Database หรือกด Ctrl+O หลังจากนั้นเลือกไปยังที่อยู่ของโปรเจ็ค แล้วเปิดไฟล์ฐานข้อมูลที่เป็นไฟล์นามสกุล sqlite3
  5. 1)เลือกแถบ Browse Data
    2)เลือกตาราง django_migrations
    3)เลือกแถวที่มี app ตรงกับชื่อ app ของเรา
    4)กดปุ่ม Delete Record
    5)ทำขั้นตอนที่ 3) และ 4) ซ้ำจนกว่าแถวที่มีชื่อ app ของเราหมด

  6. 1)กดปุ่ม Delete Table เพื่อลบตาราง ซึ่งข้อมูลที่อยู่ภายในตารางนั้นจะถูกลบทิ้ง
    2)เลือกตารางที่มีชื่อขึ้นต้นตรงกับชื่อ app (ในตัวอย่าง app ชื่อ group3)

    3)ทำขั้นตอนที่ 1) และ 2) จนกว่าตารางทั้งหมดที่มีชื่อขึ้นต้นด้วยชื่อ app จะถูกลบทิ้งทั้งหมด
  7. 1)เลือกตาราง django_content_type
    2)เลือกแถวที่มีชื่อ app (ในที่นี้ app ชื่อ group3)
    3)กดปุ่ม Delete Record
    4)ทำขั้นตอนที่ 2) และ 3) ซ้ำจนกว่าจะลบแถวที่มีชื่อ app ของเราจนหมด
  8. 1)เลือกตาราง auth_permission
    2)เลือกแถวที่เกี่ยวข้องกับตารางใน app ของเรา (ในที่นี้ app ชื่อว่า group3 มีทั้งหมด 6 ตารางคือ Prof2Lang, Subject, Section, Teach, HourlyEmployee และ work)
    3)กดปุ่ม Delete Record
    4)ทำขั้นตอนที่ 2) และ 3) ซ้ำจนกว่าแถวที่เกี่ยวข้องกับตารางใน app ของเราจะถูกลบจนหมด
  9. เข้าไปที่เมนู File >> Save Database เพื่อบันทึกการแก้ไขใน database ทั้งหมด
  10. ใช้คำสั่งปกติในการสร้างตารางฐานข้อมูลของ app ใหม่
    คำสั่งปกติที่ใช้สร้างตารางฐานข้อมูล
    $ python manage.py makemigrations ชื่อapp
    $ python manage.py sqlmigrate ชื่อapp ตัวเลขที่ได้จากคำสั่งแรก(เช่น 0001)
    $ python manage.py migrate

ไม่มีความคิดเห็น:

แสดงความคิดเห็น