ภาษา Python มีช่องทางในการเชื่อมโยงกับฐานข้อมูล 2 แบบ คือ 1. ตาราง (Table) สำหรับจัดเก็บกลุ่มข้อมูล เช่น ตารางลูกค้า ภายในตารางจะเป็นข้อมูลของลูกค้าทั้งหมด ตารางสินค้า จะเก็บกลุ่มรายละเอียดสินค้าแต่ละรายการไว้ในตารางสินค้าเท่านั้น ที่มาของภาพ : https://www.9experttraining.com เป็นพื้นฐานการจัดเก็บข้อมูลเป็นไฟล์ Text หรือ Binary เหมาะกับข้อมูลขนาดเล็กจนถึงขนาดกลาง ไฟล์ชนิดนี้จะมีความจุที่ไม่จำกัด ขึ้นอยู่กับปริมาณของข้อมูลที่จัดเก็บ เมื่อเทียบกับอีก 2 ประเภท ไฟล์ฐานข้อมูลประเภทนี้จะมีความจุไฟล์น้อยที่สุด อีกทั้งยังง่ายต่อการสร้าง ค่าใช้จ่ายน้อย สามารถใช้งานร่วมกับโปรแกรม Spreadsheet ได้ แต่ข้อด้อยคือความเร็วในการเรียกใช้งานข้อมูล ยิ่งมีข้อมูลมาก ความเร็วในการค้นหาหรือดึงข้อมูลมาใช้ก็จะทำงานได้ช้า สำหรับภาษา Python สามารถใช้คำสั่งในการสร้าง อ่าน เขียนค่าข้อมูลที่ต้องการจัดเก็บในไฟล์ฐานข้อมูลประเภทนี้ได้ โปรแกรมจะทำการสร้างไฟล์ datatest.txt ขึ้นมาหน้า Desktop แล้วให้รับค่าการป้อนชื่อสินค้าและราคาสินค้าในหน้าต่าง Python Shell ไปเรื่อยๆ จนกว่าจะพิมพ์ exit ในช่องป้อนชื่อสินค้าและป้อนราคาสินค้า ข้อมูลชื่อสินค้าและราคาสินค้าจะถูกจัดเก็บในไฟล์ datatest.txt โดยอัตโนมัติ
- ป้อนชื่อสินค้าและราคาสินค้าในหน้าต่าง Python Shell
- เปิดไฟล์ datatest.txt บนหน้า Desktop จะมีข้อมูลดังนี้ จากตัวอย่าง ให้ลองรันโปรแกรมอีกครั้ง เมื่อเราป้อนข้อมูลชื่อสินค้าและราคาสินค้าใหม่เข้าไป ข้อมูลใหม่นี้จะไปทับข้อมูลเดิม ทำให้ข้อมูลเดิมหายไป เพราะจากคำสั่งในบรรทัดที่ 2 คือ fdata = open('C:\\Users\OFFBKK\Desktop\datatest.txt', 'w') จะพบว่าเมื่อใช้อาร์กิวเมนต์ตัวอักษร 'w' จะทำให้ข้อมูลใหม่ไปทับข้อมูลเดิม หากต้องการเพิ่มข้อมูลเข้าไป โดยไม่ให้ข้อมูลเดิมสูญหาย ต้องเปลี่ยนจาก 'w' เป็น 'a'
จากตัวอย่างที่ 1 ประกาศตัวแปร lineno เพื่อใช้เก็บจำนวนครั้งในการป้อนข้อมูล โดยมีค่าเริ่มต้นเท่ากับ 1 และจะเพิ่มขึ้นทีละหนึ่งเพื่อรับข้อมูลชื่อสินค้าและราคาสินค้าชุดใหม่ โปรแกรมจะเชื่อมต่อกับไฟล์ datatest.txt ด้วยคำสั่ง open และสิ้นสุดการเชื่อมต่อด้วยคำสั่ง close ในการวนซ้ำเพื่อรับค่าการป้อนข้อมูลของสินค้าแต่ละรอบจะใช้คำสั่ง while True ซึ่งในแต่ละครั้งของการวนลูปจะเขียนข้อมูลลงในไฟล์ datatest.txt ด้วยคำสั่ง write เขียนโปรแกรมรวมคำสั่งเขียนไฟล์ และอ่านค่าข้อมูลแบบ read, readline และ readlines เมื่อรันโปรแกรม หากพิมพ์ 1 จะทำตามคำสั่งฟังก์ชัน writefile() จนกว่าจะป้อนคำว่า exit ก็จะออกจากฟังก์ชัน เมื่อรันโปรแกรม หากพิมพ์ 2 จะทำตามคำสั่งฟังก์ชัน readallfile() เมื่อรันโปรแกรม หากพิมพ์ 3 จะทำตามคำสั่งฟังก์ชัน readonelinefile() เมื่อรันโปรแกรม หากพิมพ์ 4 จะทำตามคำสั่งฟังก์ชัน readlineloopfile () ภาษา Python มีโมดูลที่มีความสามารถในการจัดสร้างไฟล์ฐานข้อมูลแบบ RDBMS (Relational Database Management System) ที่มีขนาดของไฟล์เหมาะกับการจัดเก็บข้อมูลระดับเล็กถึงระดับกลาง สำหรับโมดูลของ Python ที่ใช้ดูแลไฟล์ฐานข้อมูลนี้ คือ SQLite3 ซึ่งถูกติดตั้งพร้อมกับโปรแกรม Python แล้ว โดยรองรับการใช้คำสั่ง select, insert, delete, update, create, drop, alter เป็นต้น 2.1 การอ้างอิงโมดูลของ SQLite3 2.2 สร้างไฟล์ฐานข้อมูล มีรูปแบบการเขียน ดังนี้ โดย cn เป็นตัวแปรของ Connect Object 2.3 การใช้ Cursor Object เมื่อเชื่อมต่อกับฐานข้อมูลได้แล้ว ต่อมาจะต้องใช้ Cursor Object เพื่อเข้าถึงตารางและข้อมูลในตาราง โดยต้องเขียนคำสั่ง cur = cn.cursor() เพื่อเชื่อม Cursor เข้ากับ Cursor Object 2.3.1 การใช้ Cursor Object กับการอ่านค่าข้อมูลด้วยคำสั่ง Select คำสั่งที่ใช้ในการอ่านค่าข้อมูลต่างๆ จากตาราง คือ คำสั่ง select โดยมีรูปแบบการเขียน ดังนี้ คือ ตัวอย่าง : select ORDER.OrderNo, ORDER.OrderDate, CUSTOMER.CustFirst, 2.3.2 การใช้ Cursor Object กับการเพิ่มข้อมูลใหม่ในตารางด้วยคำสั่ง Insert รูปแบบการใช้คำสั่ง insert สำหรับเพิ่มข้อมูลลงทุกฟิลด์ของตาราง 2.3.3 การใช้ Cursor Object กับการแก้ไขข้อมูลในตารางด้วยคำสั่ง Update รูปแบบการใช้คำสั่ง update สำหรับแก้ไขข้อมูลในฟิลด์ที่ระบุทุกเรคอร์ดในตาราง 2.3.4 การใช้ Cursor Object กับการลบเรคอร์ดข้อมูลจากตารางด้วยคำสั่ง Delete รูปแบบการใช้คำสั่ง delete สำหรับลบเรคอร์ดทั้งหมดในตาราง 2.4 การสร้างตารางและความสัมพันธ์ของตาราง (Relationship)
จะได้หน้าตาโปรแกรม DB Browser for SQLite ดังนี้ รูปแบบการเขียนคำสั่ง create เพื่อสร้างตาราง : เปิดโปรแกรม DB Browser for SQLite ขึ้นมา แล้วคลิกที่ปุ่ม open Database เปิดไฟล์ฐานข้อมูล product.db ที่สร้างไว้ขึ้นมา เพื่อดูตารางที่สร้างขึ้นจากการเขียนโค้ดคำสั่ง รูปแบบการเขียนคำสั่ง create เพื่อสร้างตาราง โดยระบุ Primary Key: เปิดโปรแกรม DB Browser for SQLite ขึ้นมา แล้วคลิกที่ปุ่ม open Database เปิดไฟล์ฐานข้อมูล student.db ที่สร้างไว้ขึ้นมา เพื่อดูตารางที่สร้างขึ้นจากการเขียนโค้ดคำสั่ง รูปแบบการเขียนคำสั่ง create เพื่อสร้างตารางที่มีความสัมพันธ์ (Relationship) กับตารางอื่น : เมื่อรันโปรแกรม จะได้ตาราง 2 ตาราง คือ product และ productgroup ดังรูป
2.5 เพิ่มเรคอร์ดข้อมูลลงในตาราง ด้วยคำสั่ง insert ของ SQL Statement
จากตัวอย่าง มีการสร้างฟังก์ชัน productinput() ขึ้นมาเพื่อรับค่าข้อมูลใส่ในตาราง product (สร้างเอาไว้ก่อนแล้วในขั้นตอนการสร้างตาราง) โดยรับค่าข้อมูลทางคีย์บอร์ดด้วยคำสั่ง input() แล้วบันทึกไว้ในตัวแปร a, b, c, d, e ตามลำดับ (ตามจำนวนฟิลด์ในตาราง) หลังจากนั้นใช้คำสั่ง cur.execute("insert into product values(?,?,?,?,?)", (a,b,c,d,e)) โดยใช้เครื่องหมาย ? อ้างอิงค่าข้อมูลของตัวแปรที่จะนำไปใส่ในแต่ละฟิลด์ของตาราง product เมื่อเปิดโปรแกรม DB Browser for SQLite ก็จะได้เรคอร์ดข้อมูลในตาราง product และ productgroup ดังรูป 2.6 อ่านค่าข้อมูลจากตารางด้วยคำสั่ง select มีหลายรูปแบบดังนี้
ผลลัพธ์ : เมื่อใช้คำสั่ง fetchall ข้อมูลจะออกมาเป็นชนิด List โดยสามารถอ่านค่าข้อมูลบางฟิลด์ของบางเรคอร์ดได้ โดยการอ้างหมายเลขลำดับของตัวแปร List เช่น
ผลลัพธ์ที่ได้คือ รูปแบบที่ 2 การใช้คำสั่ง for ร่วมกับคำสั่ง Cursor Object สำหรับอ่านค่าข้อมูลในตาราง ผลลัพธ์ : ถ้าต้องการอ่านค่าข้อมูลบางฟิลด์ของเรคอร์ด ให้ระบุคำสั่งเป็น print(a[0]) แสดงค่าข้อมูลในฟิลด์แรก print(a[1]) แสดงค่าข้อมูลในฟิลด์ที่ 2 ไปเรื่อยๆ ตามลำดับ ตัวอย่างเช่น รูปแบบที่ 3 การใช้คำสั่ง select อ่านค่าข้อมูลตารางมากกว่า 1 ตารางที่มีความสัมพันธ์กัน ผลลัพธ์ที่ได้ คือ จะแสดงข้อมูลในฟิลด์ pid, title, price ของตาราง product และฟิลด์ title ของตาราง productgroup โดยเรียงลำดับข้อมูลตามที่เรากำหนด ซึ่งสามารถแสดงข้อมูลจาก 2 ตารางได้ เพราะมีฟิลด์ที่สัมพันธ์กันคือ ฟิลด์ groupid นั่นเอง 2.7 แก้ไขค่าข้อมูลเดิมในตารางด้วยคำสั่ง update
ผลลัพธ์ที่ได้ คือ 2.8 ลบค่าข้อมูลในตารางด้วยคำสั่ง delete
ผลลัพธ์ที่ได้
2.9 ปิดการเชื่อมต่อฐานข้อมูล 3.1 ดาวน์โหลดและติดตั้ง Appserv เพื่อใช้งาน localhost โดยมีขั้นตอนดังนี้ จะได้ไฟล์ติดตั้ง Appserv ชื่อว่า appserv-win32-8.6.0.exe ให้ดับเบิ้ลคลิกที่ไฟล์เพื่อทำการติดตั้งโปรแกรม 3.1.3 เปิดบราวเซอร์ Internet Explorer หรือ Google Chrome ขึ้นมา แล้วเข้าสู่หน้าแรกของ Appserv โดยพิมพ์คำว่า http://127.0.0.1:81 แล้วคลิกที่ phpMyAdmin Database Manager Version 4.6.6 ดังรูป 3.1.4 กรอก Username และ Password ที่ได้กำหนดไว้ในขั้นตอนการติดตั้ง แล้วคลิกปุ่ม Go 3.1.5 สร้างฐานข้อมูล หรือ Database โดยคลิกที่ New ใส่ชื่อ database และภาษา ซึ่งที่นี้จะเลือกเป็น utf8_unicode_ci แล้วกดปุ่ม Create 3.2 ดาวน์โหลดโมดูลพิเศษ MySQLdb 3.2.2 เมื่อทำการดาวน์โหลดไฟล์เรียบร้อยแล้ว ไฟล์ติดตั้งจะอยู่ในโฟลเดอร์ Downloads ของเครื่องคอมพิวเตอร์ ให้ทำตามขั้นตอนดังต่อไปนี้ 2) เปิดโปรแกรม Command Prompt ขึ้นมา แล้วพิมพ์ว่า cd ตามด้วยตำแหน่งไฟล์ที่เราคัดลอกมา ในที่นี้จะเป็น cd C:\Users\OFFBKK\Downloads ดังรูป แล้วกดปุ่ม Enter จะได้ผลลัพธ์ดังรูป 3) หลังจากนั้นให้พิมพ์คำสั่ง pip install ตามด้วยชื่อไฟล์ (โดยคัดลอกชื่อไฟล์ ดังรูป) ในที่นี้ไฟล์ที่ดาวน์โหลดมาชื่อว่า mysqlclient-1.3.12-cp36-cp36m-win32.whl จึงต้องพิมพ์ว่า pip install mysqlclient-1.3.12-cp36-cp36m-win32.whl แล้วกด Enter เพื่อทำการติดตั้ง เมื่อติดตั้งเรียบร้อยแล้ว จะมีข้อความว่า Successfully 3.2.3 เปิดโปรแกรม Python ขึ้นมา หลังจากนั้นให้ลองพิมพ์คำสั่ง import MySQLdb ถ้าไม่มี Error แสดงว่าได้ทำการติดตั้งโมดูล MySQLdb เรียบร้อยแล้ว 3.3 การเขียนโปรแกรมสำหรับเชื่อมต่อฐานข้อมูล MySQL ด้วยโมดูล MySQLdb ตัวอย่างเช่น
3.3.3 เขียนโปรแกรมสำหรับเชื่อมต่อฐานข้อมูล MySQL
2) การเพิ่มเรคอร์ดข้อมูลใหม่ด้วยคำสั่ง insert
ผลลัพธ์ที่ได้
หมายเหตุ : %s ใช้สำหรับตัวแปรชนิด integer ส่วน '%s' ใช้สำหรับตัวแปรชนิด string 3) การเรียกดูข้อมูลด้วยคำสั่ง select
ผลลัพธ์ที่ได้
4) การแก้ไขเรคอร์ดข้อมูลด้วยคำสั่ง update
ผลลัพธ์ที่ได้
ลักษณะการทำงานของโปรแกรม รับค่ารหัสนักเรียนทางคีย์บอร์ดด้วยคำสั่ง input() และแปลงค่าเป็น integer เพราะจะต้องนำค่าตัวแปร student_id ไปเปรียบเทียบกับฟิลด์ id (row[0]) ของตาราง ซึ่งเป็นชนิด integer หลังจากนั้นใช้คำสั่ง cur.execute("select * from student") เพื่อเรียกดูข้อมูลทั้งหมดในตาราง วนลูปคำสั่ง for row in cur.fetchall() เพื่อดูข้อมูลทีละเรคอร์ด ในระหว่างการวนลูปให้ทำการตรวจสอบเงื่อนไขว่า รหัสนักเรียนที่กรอกเข้ามาตรงกับฟิลด์ id ในตารางหรือไม่ (student_id == row[0]) ถ้าตรงกันให้แสดงเรคอร์ดนั้นมาทางหน้าจอด้วยคำสั่ง print(row) จากนั้นให้กรอกค่าเดิมที่ต้องการแก้ไข แล้วนำค่ามาเปรียบเทียบว่าตรงกับฟิลด์ใด เช่น ถ้าตรงกับฟิลด์ id ก็ให้ทำการแทนที่ข้อมูลของฟิลด์ id ด้วยคำสั่ง cur.execute("update student set id = %s where id = %s",(newdata, row[0])) โดย %s ตัวแรกคือตัวแปร newdata ก็คือข้อมูลใหม่ที่ต้องใส่เข้าไป ส่วน %s ตัวที่สองคือ row[0] เป็นการระบุตำแหน่งของเรคอร์ดที่ต้องการแก้ไข 5) การลบเรคอร์ดข้อมูลด้วยคำสั่ง delete
ผลลัพธ์ที่ได้
ลักษณะการทำงานของโปรแกรม รับค่ารหัสนักเรียนทางคีย์บอร์ดด้วยคำสั่ง input() และแปลงค่าเป็น integer เพราะจะต้องนำค่าตัวแปร student_id ไปเปรียบเทียบกับฟิลด์ id (row[0]) ของตาราง ซึ่งเป็นชนิด integer หลังจากนั้นใช้คำสั่ง cur.execute("select * from student") เพื่อเรียกดูข้อมูลทั้งหมดในตาราง วนลูปคำสั่ง for row in cur.fetchall() เพื่อดูข้อมูลทีละเรคอร์ด ในระหว่างการวนลูปให้ทำการตรวจสอบเงื่อนไขว่า รหัสนักเรียนที่กรอกเข้ามาตรงกับฟิลด์ id ในตารางหรือไม่ (student_id == row[0]) ถ้าตรงกันให้แสดงเรคอร์ดนั้นมาทางหน้าจอด้วยคำสั่ง print(row) จากนั้นให้ทำการยืนยันการลบ ถ้ามีการพิมพ์ y หรือ Y ทางคีย์บอร์ดให้ทำการลบเรคอร์ดนั้นด้วยคำสั่ง cur.execute("delete from student where id = %s", (row[0],)) |