สรุปสั้น ๆ
ฐานข้อมูลนั้นเป็นสิ่งที่จำเป็น และ เป็นของที่เรามักจะใช้ควบคู่กับการเขียนโปรแกรมอยู่แล้ว ไม่ว่าจะเป็นการดึงข้อมูลลูกค้า สินค้า เพิ่มข้อมูล ลบข้อมูล เปลี่ยนแปลงปรับปรุงข้อมูล (CRUD) โดยการใช้ Python ก็สามารถติดต่อกับฐานข้อมูลได้แบบง่าย ๆ สำหรับในวันนี้เราจะมาลองติดต่อกับ MySQL หนึ่งใน Database Management System ที่ได้รับความนิยมสูงไปพร้อมกัน !
เขียนโดย
Kittikorn Prasertsak (Prame)
Founder @ borntoDev
บทความนี้ตีพิมพ์ และ เผยแพร่เมื่อ 18 มกราคม 2566
เริ่มต้นด้วยการติดต่อฐานข้อมูล
สำหรับการเริ่มต้นเพื่อทำการติดต่อฐานข้อมูลนั้น เราจะต้องทำการ import mysql เข้ามาก่อน โดยในที่นี้เราจะใช้คำสั่งเป็น import mysql.connector และ ทำการสร้าง Object เพื่อเป็นตัวเก็บข้อมูลสำหรับการเชื่อมต่อฐานข้อมูลตามนี้
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้"
)
print(connection)
โดยสิ่งที่เราต้องกรอกคือ host หรือ ที่อยู่ของ Database Server เรา ถ้าอยู่ภายในเครื่องเราสามารถใส่ localhost ได้ แต่ถ้าอยู่ในออนไลน์เราก็สามารถใส่ IP Address หรือ Location ลงไปได้เลย ต่อมาให้ดำเนินการใส่ Username และ Password ลงไป
และ เราสามารถทำการทดสอบได้โดยการใส่คำสั่ง print(connection) เพื่อทำการแสดงตัว Connection ออกมาว่าสามารถเข้าถึงได้อย่างเรียบร้อยนั่นเอง
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้"
)
print(connection)
สร้างฐานข้อมูลของเรา
ย้ำว่ากรณีที่เรามี ฐานข้อมูลอยู่แล้ว เราไม่ต้องทำกรณีนี้ก็ได้ เพราะ คำสั่งนี้มีไว้ทำการสร้าง Database ใน Database Management System ของเรานั่นเอง โดยวิธีการก็คือ ให้เราทำการสร้าง และ เรียกใช้ตัว MySQLCursor ซึ่ง เจ้าตัว Cursor นี้จะมีหน้าที่เอาไว้ทำการใส่คำสั่ง SQL ไป และ สั่งให้คำสั่งมันทำงานนั่นเอง
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้"
)
db_cursor = connection.cursor()
#เราสามารถรันคำสั่ง SQL ในการสร้าง Database ได้เลย
db_cursor.execute("CREATE DATABASE OurDB")
โดยเราจะสังเกตเห็นได้ว่า เราจะใช้ connection (ชื่อ Object ที่สร้างไว้ข้างบน) .cursor() เพื่อเก็บเจ้าตัว MySQLCursor นี้ไว้ในตัวแปร db_cursor และ เราก็นำตัว db_cursor นี่แหละมาทำการ .execute หรือ สั่งให้ทำงาน ว่าแต่อยากจะสั่งให้เขาทำงานอะไรหละ ? ก็ใส่คำสั่ง SQL ตรงนี้ไว้ในฟังก์ชันได้เลย โดยในที่นี้เราจะใส่คำสั่ง CREATE DATABASE ลงไปได้เลย
มาถึงตรงนี้ ถ้าใครไม่มีพื้นฐานการเขียน SQL มาก่อนทำยังไงดี ?
ต้องบอกว่าการติดต่อฐานข้อมูลแม้ว่าเราจะเขียนด้วย Python (หรือ ภาษาอะไรก็ตาม C, C++, Java, PHP) ฝั่งที่เราเขียนในภาษาหลักของเรา ก็จะเป็นการนำข้อมูลที่ได้จากฐานข้อมูลมาจัดการ แสดงผล ประมวลผล หรือ เก็บไว้ทำอย่างอื่นต่อ
แต่ก่อนหน้าที่เราจะได้ข้อมูลตรงนี้มาเราจะต้องทำการ “พูดคุย” กับฐานข้อมูลก่อน ซึ่งตรงนี้โดยปกติ ถ้าเป็น SQL Database ทั่วไป ไม่ว่าจะเป็น SQL Server หรือ MySQL แบบในบทความนี้ เราจะต้องเข้าใจภาษา “SQL” เพื่อพูดคุยในการ ร้องขอข้อมูล หรือ สั่งฐานข้อมูลให้ เพิ่ม ลบ แก้ไข ข้อมูลให้เราได้นั่นเอง
![](https://b2dmain-ruk.cdn.jelastic.net/wp-content/uploads/2023/01/screely-1674122298773.png)
หลักสูตรฟรี และ ดีมากจาก borntoDev กับ Essential SQL for Everyone
สร้างตารางสำหรับฐานข้อมูล
เมื่อเรามีฐานข้อมูลเรียบร้อย (ถ้าไม่มีใช้ข้างบนได้เลย) เราจะมาสร้างตารางในฐานข้อมูลกัน อารมณ์คล้าย ๆ ก่อนหน้านี้เรามีไฟล์ excel แต่ยังไม่มีตารางข้อมูลอะไรเลย ตอนนี้มาสร้างรูปแบบตารางของฐานข้อมูลเพื่อเก็บข้อมูลไปพร้อมกัน
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้",
database="OurDB"
)
db_cursor = connection.cursor()
#เราสามารถรันคำสั่ง SQL ในการสร้าง Database ได้เลย
db_cursor.execute("CREATE DATABASE OurDB")
#สร้าง Table ลงไป ก็ใช้ Execute ได้เช่นกัน
db_cursor.execute("CREATE TABLE employees (name VARCHAR(255),
address VARCHAR(255))")
สังเกตดี ๆ ว่าคำสั่งในภาษาไพธอนจะคล้าย ๆ กับ การสร้าง Database เลย เพราะว่าเขาจะใช้ Curosr ในการ Execute สั่งให้ Database ทำงานตามคำสั่ง
SQL ที่เราสั่งนั่นเอง โดยในคำสั่งนี้จะเป็นการสร้างตาราง employees ที่ไว้เก็บข้อมูลพนักงาน และ เราจะดำเนินการเก็บข้อมูลทั้งหมด 2 ตัวในตารางนั่นก็คือ name หรือ ชื่อพนักงาน และ address เป็นข้อมูลประเภท VARCHAR ทั้งคู่เลย
เพิ่ม Record ลงในฐานข้อมูลกัน !
อันนี้คือสิ่งที่หลายคนเฝ้ารอกับการเพิ่มข้อมูลลงฐานข้อมูล ซึ่งไม่ว่าก่อนหน้านี้ ฐานข้อมูลเจ้าตัว MySQL ของเราอาจจะกำลังเชื่อมต่อหรือใช้งานกับเว็บแอปอื่น ๆ อยู่ เช่น WordPress หรือ โปรแกรมบัญชี โปรแกรมอะไรก็แล้วแต่ เราสามารถเชื่อมต่อไปในฐานข้อมูลนั้น ๆ และ เพิ่มข้อมูลลงตารางเหล่านั้นด้วย Python ตามนี้ได้เลย
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้",
database="OurDB"
)
db_cursor = connection.cursor()
#สร้าง String ไว้รอใส่คำสั่งได้เลย
sql_command = "INSERT INTO employees (name, address) VALUES (%s, %s)"
#Value ที่ต้องการใส่ใน Command ทำไว้ในรูปแบบ Tuple ไว้ทำการ map กับคำสั่งด้านบนในตรง VALUES
val = ("Jazz", "Papiyong Kook Kook")
#สั่งให้คำสั่งทำงานได้เลย
db_cursor.execute(sql_command, val)
connection.commit()
#แสดงว่ามีกี่แถวที่ทำงานสำเร็จ
print(db_cursor.rowcount, "Succeed !")
สังเกตว่ามีความคล้ายกับ 2 คำสั่งก่อนหน้า แต่ ๆ ๆ มันจะมีความแตกต่างตรงที่เราจะไม่ใส่ทุกอย่างที่เราจะ Insert ไปตรง ๆ (ซึ่งจริง ๆ เราจะใส่ไปก็ได้) แต่เราจะใช้เป็น Tuple สร้างข้อมูลไล่ลำดับมา และ ใส่ข้อมูลตามลำดับ เช่นในตัวอย่างที่ เราจะ INSERT พนักงานชื่อ Jazz และ ที่อยู่เป็น Papiyong Kook Kook ก็จะใส่ใน Tuple ที่ชื่อว่า val ได้เลย
และ สุดท้ายโค้ดที่เพิ่มเข้ามาจะมีส่วน commit() และ ฟังก์ชันในการแสดงผลจำนวน Row หรือ แถวที่มีในตารางนั้น ๆ นั่นเอง ถ้าหากเราใส่ข้อมูลใหม่ลงในฐานข้อมูลเรียบร้อย จำนวนสมาชิกในแถวก็เพิ่มขึ้นนั่นเอง
อ๋ออ ! แล้วก็สังเกตด้วยนะว่าบรรทัดแรก ๆ ตรงส่วนที่ประกาศ Object ชื่อ connection จะมีเพิ่มฟืลด์ database ลงไปด้วย ในที่นี้เราสร้าง database ชื่อ OurDB ไว้ก็จะใช้ชื่อนี้ แต่ถ้า Database เป็นชื่ออื่น ให้ใช้เป็นชื่อที่เราต้องการเข้าถึง รวมถึงชื่อ Table ในคำสั่งของ SQL Command ก่อน Execute ด้วยนะ
แล้วดึงข้อมูลออกมาแสดงจากฐานข้อมูลหละ ?
ตัวนี้จะมีความแตกต่างจากทุกคำสั่งก่อนหน้าที่เราติดต่อกับฐานข้อมูลเพื่อสั่งงานให้ MySQL เพิ่มข้อมูล หรือ สั่งลงไปแล้วก็จบ ไม่ได้ร้องขอผลลัพธ์ หรือ เน้นไปที่ MySQL ส่งข้อมูลกลับมาเท่าไหร่ แต่ในเคสนี้เราต้องการดึงข้อมูลออกจาก MySQL ด้วย Python ดังนั้น เราจึงต้องมีตัวที่ไว้รับข้อมูลตรงนี้นั่นเอง
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้",
database="OurDB"
)
db_cursor = connection.cursor()
#สร้าง String ไว้รอใส่คำสั่งสำหรับการ SELECT
db_cursor.execute("SELECT * FROM employees")
#ดึงข้อมูลมาเก็บไว้ใน result
result = db_cursor.fetchall()
#แสดงผลข้อมูลมาทีละตัวจากที่ SELECT ได้ทั้งหมด
for data in result:
print(data)
ตัว execute ทำเหมือนเดิมคือใส่คำสั่ง SQL แต่สิ่งที่แตกต่างคือจะมีฟังก์ชัน fetchall ถ้าใครไม่รู้มันคืออะไร มันมาจาก Fetch All (แปลว่าดึงมาทั้งหมด) นั่นเอง แต่พอมาเขียนติด ๆ กันมันเลยประหลาด ๆ นะคร้าบ 55
โดยหลังจากฟังก์ชันดังกล่าวดึงข้อมูลมาเรียบร้อยจะถูกเก็บไว้ใน result และ เราก็ค่อย loop ทำการ print ข้อมูลออกมานั่นเอง
ต่อมา ถ้าเราจะลบข้อมูลทำได้ตามนี้เลย !!
การลบข้อมูลออก สังเกตดูว่าคล้าย ๆ กับ กรณีอื่น ๆ ด้านบนเลย เช่นเดียวกับการสร้าง Table หรือ การเพิ่มข้อมูลลงใน Table เพราะเป็นการสั่งให้ Execute แล้วจบเท่านั้น
import mysql.connector
#ทำการเชื่อมต่อกับฐานข้อมูลง่าย ๆ แค่ใส่ Host / User / Password ให้ถูกต้อง
connection = mysql.connector.connect(
host="localhost",
user="กรอก Username ตรงนี้",
password="กรอกรหัสผ่านตรงนี้",
database="OurDB"
)
db_cursor = connection.cursor()
#สร้าง String สำหรับใส่คำสั่งลบพนักงานออกตาม Address ที่ระบุไว้
sql_command = "DELETE FROM employees WHERE address = 'Papiyong Kook Kook'"
#สั่งให้คำสั่งทำงานได้เลย
db_cursor.execute(sql_command)
connection.commit()
#แสดงว่ามีกี่แถวที่ทำงานสำเร็จ
print(db_cursor.rowcount, "Deleted !")
โดยอาจจะมีส่วนสุดท้ายที่เพิ่มเติมขึ้นมา และ แตกต่างก็แค่ print บรรทัดสุดท้ายเพื่อให้ทำการ rowcount หรือ แสดงจำนวน row (แถว) ทั้งหมดออกมา ซึ่งจะไม่ทำก็ได้นะ แต่เราใส่ให้ดูเพื่อให้เห็นผลชัด ๆ เพราะปกติเจ้าคำสั่งพวกนี้ มันสั่งเสร็จแล้วก็จบไป ไม่มีอะไรมาบอกเราเลยจ้า 5555
แล้วอันอื่นๆ หละพี่ UPDATE เอย JOIN เอย บลา ๆ
อย่ากังวลไป แม้ว่าเราจะไม่สอน แต่จากที่เราสอนไปก่อนหน้าทั้งหมด มันจะมีทั้งหมด 2 แบบหลัก ๆ คือ แบบที่เป็นการสั่งให้ Database มันทำงานแล้วจบ ๆ ไป เช่น เพิ่มข้อมูล ลบข้อมูล หรือ จนไปถึงอัพเดตข้อมูล อันนี้เราจะใช้รูปแบบใน Python เหมือน ๆ กันเลย เพราะเหมือนเราใช้ให้ Python ไปคุยสั่ง MySQL แล้วก็จบไป
ส่วนพวกที่ต้องการข้อมูลมาใช้ต่อเช่น SELECT จนไปถึง Join ที่ทั้งมีเงื่อนไขต่าง ๆ ใน WHERE หรือ ไม่มี พวกนี้เราต้อง Fetch ข้อมูลมาเก็บไว้ และ เอาข้อมูลไปทำงานต่อนั่นเอง
สุดท้ายยย หากใครใช้ Python ยังไม่คล่อง ยังไม่เป็นเรามีทางออก
![](https://b2dmain-ruk.cdn.jelastic.net/wp-content/uploads/2023/01/screely-1674124228019.png)
คอร์สเรียนที่ได้รับความนิยมสูงสุดของ borntoDev
กับหลักสูตร “Complete Python 3 Programming” สอนจัดเต็มเป็น 200 ตอนกับพื้นฐานภาษา Python ให้การเรียน Python เข้าใจจากพื้นฐานจริง ๆ สู่การต่อยอดแบบไม่รู้จบ หากใครสนใจสามารถเข้าไปดูได้ที่เว็บของเราได้เลยย ! จากปกติ 3,590.- เหลือเพียง 2,590.- เท่านั้น สนใจ คลิกที่นี่
ระบบฝึกทักษะ การเขียนโปรแกรม
ที่พร้อมตรวจผลงานคุณ 24 ชั่วโมง
- โจทย์ปัญหากว่า 200 ข้อ ที่รอท้าทายคุณอยู่
- รองรับ 9 ภาษาโปรแกรมหลัก ไม่ว่าจะ Java, Python, C ก็เขียนได้
- ใช้งานได้ฟรี ! ครบ 20 ข้อขึ้นไป รับ Certificate ไปเลย !!