Skip to main content
0

สรุปสั้น ๆ

ฐานข้อมูลนั้นเป็นสิ่งที่จำเป็น และ เป็นของที่เรามักจะใช้ควบคู่กับการเขียนโปรแกรมอยู่แล้ว ไม่ว่าจะเป็นการดึงข้อมูลลูกค้า สินค้า เพิ่มข้อมูล ลบข้อมูล เปลี่ยนแปลงปรับปรุงข้อมูล (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” เพื่อพูดคุยในการ ร้องขอข้อมูล หรือ สั่งฐานข้อมูลให้ เพิ่ม ลบ แก้ไข ข้อมูลให้เราได้นั่นเอง

หลักสูตรฟรี และ ดีมากจาก 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 ยังไม่คล่อง ยังไม่เป็นเรามีทางออก

คอร์สเรียนที่ได้รับความนิยมสูงสุดของ borntoDev

กับหลักสูตร “Complete Python 3 Programming” สอนจัดเต็มเป็น 200 ตอนกับพื้นฐานภาษา Python ให้การเรียน Python เข้าใจจากพื้นฐานจริง ๆ สู่การต่อยอดแบบไม่รู้จบ หากใครสนใจสามารถเข้าไปดูได้ที่เว็บของเราได้เลยย ! จากปกติ 3,590.- เหลือเพียง 2,590.- เท่านั้น สนใจ คลิกที่นี่

ระบบฝึกทักษะ การเขียนโปรแกรม

ที่พร้อมตรวจผลงานคุณ 24 ชั่วโมง

  • โจทย์ปัญหากว่า 200 ข้อ ที่รอท้าทายคุณอยู่
  • รองรับ 9 ภาษาโปรแกรมหลัก ไม่ว่าจะ Java, Python, C ก็เขียนได้
  • ใช้งานได้ฟรี ! ครบ 20 ข้อขึ้นไป รับ Certificate ไปเลย !!
เข้าใช้งานระบบ DevLab ฟรี !เรียนรู้เพิ่มเติม

เรียนรู้ไอที “อัพสกิลเขียนโปรแกรม” จากตัวจริง
ปั้นให้คุณเป็น คนสายไอทีระดับมืออาชีพ

BorntoDev

Author BorntoDev

BorntoDev Co., Ltd.

More posts by BorntoDev

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า