วันอังคารที่ 10 ธันวาคม พ.ศ. 2556

การใช้งาน MySQL

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

  1. MySQLdb การติดตั้งที่ MySQLdb ต้องติดตั้ง MySQL บนเครื่องที่พัฒนาด้วยเพื่อให้เรียกใช้ไลบราลีของ MySQL หรือต้องเรียกใช้ C API เพื่อเชื่อมต่อ
  2. Connector/Python เป็นโมดูลที่ทาง MySQL ทำออกมาเอง ไม่จำเป็นต้องติดตั้ง MySQL ในเครื่องที่พัฒนา เพราะเขียนด้วย Python ล้วน ๆ

การเรียกใช้งานจะคล้ายกันแต่จะต่างกันนิดหน่อย  ไม่ว่าจะใช้วิธีใดเชื่อมต่อสิ่งหนึ่งที่จะต้องพิจารณาคือ โปรแกรมที่พัฒนาขึ้นมานั้นจะนำไปใช้ที่ไหน ถ้าเป็นโปรแกรมที่เราติดตั้งในเครื่องที่เราควบคุมได้ทุกอย่างหรือบนเครื่องเซิร์ฟเวอร์แบบ VPS หรือ Decdicated Server จะใช้ตัวไหนก็ได้เพราะสามารถควบคุมสิทธิ์ต่าง ๆ ได้เต็มที่ แต่ถ้าจะนำไปใช้บนเครื่องเช่าแบบแชร์ (Shared Hosting) ก็ต้องอ่านรายละเอียดกันก่อนนะว่า มีโมดูลไหนเกี่ยวกับ Python ให้เราใช้ได้บ้างไม่งั้นมัวทำไป กลายเป็นพอจะเอาขึ้นกลับใช้ไม่ได้เนื่องจากติดตั้งบางโมดูลที่ต้องการไม่ได้จะหาว่าไม่เตือน โดยเฉพาะโฮสในไทยจะไม่ค่อยจะมี Python แต่ถ้าเป็นต่างประเทศมักจะมี Python มาให้ใช้

ตัวอย่างการเชื่อมต่อฐานข้อมูล MySQL ด้วย MySQLdb

#สำหรับ MySQLdb
import MySQLdb as mdb
import sys

try:
    con = mdb.connect('yourhost', 'yourusername', 'yourpassword', 'yourdb');
    cur = con.cursor()
    cur.execute("SELECT VERSION()")
    ver = cur.fetchone()
    print "Database version : %s " % ver
except mdb.Error, e:
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)
finally:
    if con:
        con.close()

ตัวอย่างการเชื่อมต่อฐานข้อมูลด้วย Connector/Python
#สำหรับ Connector/Python
import mysql.connector
from mysql.connector import errorcode
try:
    con = mysql.connector.connect(host='yourhost',
                                user='youruser',
                                password='yourpassword',
                                database='yourdb')
    cur = con.cursor()
    cur.execute("SELECT VERSION()")
    ver = cur.fetchone()
    print "Database version : %s " % ver
except mysql.connector.Error as err:
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
        print("Something is wrong with your user name or password")
    elif err.errno == errorcode.ER_BAD_DB_ERROR:
        print("Database does not exists")
    else:
        print(err)
    else:
       con.close()
จะเห็นว่าการใช้งานก็จะคล้ายกัน ถ้าให้เลือกใช้เองตอนนี้คงต้องเลือก MySQLdb เพราะว่า shared host ที่ใช้อยู่ มีโมดูลนี้ติดตั้งให้แล้ว ถึงตอนพัฒนาจะติดตั้งยากหน่อยก็เถอะ