การใช้ Python เชื่อมต่อ MySql เบื้องต้น

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

การใช้ Python เชื่อมต่อ MySql เบื้องต้น

ช่วงนี้ผมลองกลับมาหัด Python อีกครั้งพบว่ามันเป็นภาษาที่มีลูกเล่นและ performance ที่ดีเลยที่เดียวอีกอย่างเป็นภาษาที่ใช้ในการวิเคราะห์ข้อมูลได้ดีภาษาหนึ่งก็ว่าได้ ในบทความนี้ผมเลยจะมาบอกขั้นตอนการเชื่อมต่อ mysql ซึ่งเป็น database พื้นฐานที่นักพัฒนา software ส่วนใหญ่รู้จักกันดีนะครับโดยผม จะใช้ sample data ของ mysql ที่มีให้ download กันที่ชื่อว่า sakila โดยท่านสามารถ download กันได้จาก url นี้เลยครับ sakila-db

เมื่อ download ข้อมูลตัวอย่างเสร็จแล้วก็ทำการแตกไฟล์ zip จากนั้นเปิด mysql console ขึ้นมาเพื่อ import ข้อมูลเข้าโดยใช้คำสั่ง

[source]

SOURCE  path ที่เราเก็บไฟล์/sakila-schema.sql;

[/source]

เพื่อทำการสร้าง table ต่างๆจากนั้นก็ตามด้วย

[source]

SOURCE  path ที่เราเก็บไฟล์/sakila-data.sql;

[/source]

เพื่อทำการใส่ข้อมูล เมื่อลองใช้คำสั่ง

[source]

show tables;

[/source]

ก็จะได้ดังรูป

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

ข้อมูลเพิ่มเติมเกี่ยวกับ sakila

จากนั้นก็มาต่อกันในส่วน Python โดยในครั้งนี้ผมจะใช้ PyCharm โดยใช้ libary ที่ชื่อว่า PyMySQL ในการเชื่อมต่อกับฐานข้อมูล MySQL

เริ่มแรกผมทำการสร้าง project ใหม่ขึ้นมาใน PyCharm จากนั้นทำการเพิ่ม libary PyMySQL โดยไปที่ File -> Setting-> Project -> Intepeter Project

ตามภาพเลยครับ

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

จากนั้นคลิก + แล้วค้นหา PyMySQL แล้ว Install Package

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

เมื่อ install เสร็จก็เริ่มในส่วน coding ได้เลยครับ ทำการสร้างไฟล์ python ขึ้นมาโดยใช้ชื่อว่า test_connect.py มีโค้ดตามด้านล่างครับ

 

[source language=”python”]

import pymysql

db = pymysql.connect(host=’localhost’,db=’sakila’, user=’root’
,passwd=’root’,port=3306,charset=’utf8mb4′)
cursor = db.cursor()
sqlString = “SELECT * FROM film WHERE length > %s”
cursor.execute(sqlString,90)
films = cursor.fetchall()
print type(films)

for film in films:
print((“film_id : {} | title : {} | description : {}”).format(film[0],film[1],film[2]))

[/source]

จากโค้ดเริ่มโดยทำการ import pymysql เข้ามา จากนั้นใช้คำสั่ง pymysql.connect แล้วใส่ parameter เกี่ยวกับ mysql server ที่เราต้องการเชื่อมต่อ

หลังจากนั้นก็จะมีตัวแปรที่ชื่อว่า cursor โดยกำหนดค่าให้เท่ากับ db.cursor() ซึ่งเราจะใช้คำสั่ง sql ผ่านเจ้าตัวแปร cursor นั้นเอง จากโค้ดผมจะลอง query ข้อมูลใน table  film ขึ้นมาดู

ซึ่งเจ้า cusor นั้นใช้คำสั่ง .execute เพื่อส่งคำสั่ง sql ไปยัง MySQL โดยเราสามารถ pass value ไปได้ด้วยโดยใช้ string format ซึ่งมันจะแทนค่าใน %s จากตัวอย่างโค้ดด้านบนครับ

เมื่อได้คำสั่ง sql เรียบร้อยแล้วจากนั้นก็ใช้คำสั่ง cursor.execute เพื่อส่งคำสั่ง sql ไปยัง MySQL ต่อจากนั้นก็ใช้คำสั่ง cursor.fetall() เพื่อจะได้จำนวน rows ทั้งหมดที่ได้จาก query

เมื่อลองรันโค้ด ก็จะได้ชนิดข้อมูลกลับมาเป็น tuple แล้ว index [] เป็นตัวเลขเริ่มตามจาก column แรกสุดไปยัง column สุดท้าย ได้ผลลัพธ์ดังนี้

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

จากผลลัพธฺจะเห็นว่า [0] = column film_id, [1] = title , [2] = description นั้นเอง ก็เป็นอันเสร็จตัวอย่างการ select ข้อมูล

ต่อไปเป็นวิธีการ insert, update ครับ โดยผมทำการสร้างไฟล์ python ขึ้นมาใหม่ให้ชื่อว่า crud.py โดยมีโค้ดดังนี้ครับ

[source language=”python”]
import pymysql

db = pymysql.connect(host=’localhost’,db=’sakila’, user=’root’
,passwd=’root’,port=3306,charset=’utf8mb4′)
cursor = db.cursor()

sqlString = “INSERT INTO category(name) VALUES(‘Short-Film’)”
cursor.execute(sqlString)
db.commit()
print(“Insert ID “, cursor.lastrowid)
[/source]

 

โค้ดในส่วนการเชื่อมต่อก็จะเหมือนกับไฟล์ก่อนหน้านี้ต่างกันแค่ไฟล์นี้จะส่งคำสั่ง insert เข้าไปแทนแล้วเปลี่ยนไป insert ข้อมูลใน table category เพราะ column มันน้อยดีขี้เกียจยกตัวอย่างจาก table film เพราะ column เยอะ แต่เจ้าตัว pymysql นั้น default การเปลี่ยนข้อมูลไม่ว่าจะ update insert หรือ delete นั้นจะต้องมีการยืนยันคำสั่ง หรือที่เรียกว่า commit นั้นเอง
โดยจะใช้คำส่งผ่านตัว connection คือ db นั้นเองใช้คำสั่ง db.commit() และเมื่อ insert แล้ว id ที่ insert ถ้าเป็น auto increment บ้างครั้งเราก็อยากได้ id
ที่ทำการ insert เพื่อไป process ต่อสามารถใช้คำสั่ง cursor.lastrowid ได้เลยครับ เมื่อลองรันก็จะได้ผลลัพธ์ดังภาพครับ

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

การใช้ PYTHON เชื่อมต่อ MYSQL เบื้องต้น

เมื่อลอง select ข้อมูล table category ใน database จาก mysql console ดูเห็นว่ามีข้อมูลใหม่เพิ่มเข้ามา id 30 category_name Short-Film

ต่อจากนั้นผมก็ลอง comment ส่วน insert แล้วทำการ update ข้อมูลดูโดยจะ update ข้อมูล category ที่ id 30 ให้เป็นชื่อเป็น Mini-Film แทนโดยมีโค้ด python ดังนี้ครับ

 

[source]
import pymysql

db = pymysql.connect(host=’localhost’,db=’sakila’, user=’root’
,passwd=’root’,port=3306,charset=’utf8mb4′)
cursor = db.cursor()
”’

sqlString = “INSERT INTO category(name) VALUES(‘Short-Film’)”
cursor.execute(sqlString)
db.commit()
print(“Insert ID “, cursor.lastrowid)
”’

sqlString = “UPDATE category SET name=’Mini-Film’ WHERE category_id = %s ”
id = 30
cursor.execute(sqlString,id)
db.commit();
[/source]

 

เมื่อลองรันโปรแกรม pycharm ดูจากนั้นไป select ข้อมูลใน table category ก็จะได้ดังภาพครับ

6

จะเห็นว่า id 30 เปลี่ยนเป็นชื่อ Mini-Film แล้ว ต่อจากนั้นก็ทำการ comment โค้ดนั้นส่วน update ต่อแล้วเพิ่มโค้ดส่วน delete มีโค้ดดังนี้

[source language=”python”]
sqlString = “DELETE FROM category WHERE category_id = %s ”
id = 30
cursor.execute(sqlString,id)
db.commit();
[/source]

เมื่อลองรันโค้ดดูแล้ว select ข้อมูล category ดูอีกครับ
7
category Mini-Film ก็ถูกลบไปแล้ว จะเห็นว่าเจ้า libary PyMySql นั้นค่อยข้างที่จะใช้ง่ายไม่มีลูกเล่นอะไรมากเท่าไรเหมาะสำหรับการเชื่อมต่อ Mysql เบื่องต้นเลยครับแต่จุดสังเกตคือการ CRUD กับข้อมูลนั้นต้อง
commit ยืนยันเสมอครับ ยังไงก็ลอง download code ไฟล์ตัวอย่างในบทความนี้ไปศึกษากันได้นะครับ

Download SourceCode

-ข้อมูลเพิ่มเติมเกี่ยวกับ PyMySQL 

Leave a Reply

Your email address will not be published. Required fields are marked *