วันอาทิตย์ที่ 5 มกราคม พ.ศ. 2557

Work 1 Resource Tracking - Problem OperationalError with Solution

Problem OperationalError with Solution

    หลังจากที่เราทำการแก้ไข Models นั้นหลายๆคนคงต้องเจอปัญหา OperationalError พร้อมกับบอกว่า ไม่มี Field XXX ใน Table กันบ้างมาไม่มากก็น้อยโดยปัญหานี้เกิดจากเวลาที่เราให้ตัว Django syncdb แต่ตัว syncdb นั้นไม่ยอมแก้ไข table ให้ทำให้เกิดปัญหาดังกล่างขึ้น ซึ่งวิธีที่ผมเคยใช้แก้ปัญหานั้นคือการลบ db.sqlite3 แล้วสร้างขึ้นใหม่แต่นั่นทำให้ Data ทั้งหมดในนั้นต้องหายไปด้วย ดังนั้นวันนี้ผมจึงขอเสนอวิธีการแก้ไขปัญหาโดยที่ Data ของเรายังอยู่ครบเหมือนเดิมกันครับ

1.ดาวโหลด SQLite database browser ซึ่งเป็นโปรแกรมแบบ Open source หาโหลดได้จาก Ubuntu Software Center ที่มีมากับ OS Ubuntu ได้เลยครับ


โดยโปรแกรมที่เราโหลดตัวนี้สามารถเปิด db.sqlite3 ของเรามาทำการแก้ไขแบบ Manual ได้เลย

2.เปิด Terminal จากนั้น cd ไปยัง Directory โปรเจค Django ของตนเองจากนั้นพิม
python manage.py sql "Appname"
 โดย "Appname" นั้นเป็นชื่อ App ที่แต่ละคนตั้งเองครับจะได้ดังตัวอย่างนี้


ให้เปิด Terminal หน้านี้ทิ้งไว้ก่อนจะนำไปใช้ในลำดับถัดไป

3.เปิดโปรแกรม SQLite database browser ที่เราโหลดมา จากนั้นเปิดไฟล์ db.sqlite3 ของเราที่มีปัญหาอยู่


 4.จากนั้นกดปุ่มรูปตารางที่มีดินสอตามรูปด้านล่างนี้


5.จากนั้นจะมีหน้าต่างขึ้นมาให้เลือก table ที่เราต้องการแก้ไขให้เลือกอันที่เราแก้ไขใน Models ไปหลังสุด


6.จะปรากฎหน้าต่างรูปแบบนี้ขึ้นมาโดยในส่วนของ Field name และ Field type จะแตกต่างกัน จาากจุดนี้ให้ย้อนกลับไปดูที่ Terminal ในข้อ 2 ที่ให้เปิดไว้ ว่ามีอะไรที่ใน SQLite database browser นั้นไม่มีแต่ใน Terminal มี โดยใน Terminal จะเป็น Field name เว้นวรรคแล้วตามด้วย Field type โดยชื่อของ table จะอยู่ด้านบนระบุไว้เรียบร้อยแล้ว


7.จากข้อ 6 ในตัวอย่างนี้นั้นตัว Description เป็นตัวที่ไม่มีก็ให้เรากดปุ่ม Add field จากนั้น กรอก Field name เป็นชื่อของตัวที่ขาดหายไปจาก table


8.ให้เลือกเลือก Field type ใส่ซึ่งถ้าไม่มีแบบที่ตรงกับ Terminal ก็ให้กดปุ่ม ... ด้านข้างแล้วพิมเอง


9.กด OK และ Create

10.ทำซ้ำข้อ 4-9 จนใน db.sqlite3 ของเรามี table ตรงกับใน terminal ทั้งหมดก็ให้กด save แล้วปิดโปรแกรมลองรัน Django แล้วทดสอบ Web Application ของเราอีกครั้ง

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

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