เขียนไพทอนเพื่อติดต่อ posgreSQL


แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

Moderators: mindphp, ผู้ดูแลกระดาน

puopun.p
PHP Hero Member
PHP Hero Member
Posts: 120
Joined: 27/06/2016 10:03 am

เขียนไพทอนเพื่อติดต่อ posgreSQL

Post by puopun.p » 02/07/2016 5:51 pm

ในบทความนี้จะยกตัวอย่างการเขียนโปรแกรมภาษาไพทอนเพื่อใช้ติดต่อกับฐานข้อมูล postgreSQL (โพสเกรส เอสคิวแอล)ซึ่งมีความไวกว่า mySQL เหมาะสำหรับงานที่สเกลใหญ่ขึ้น
โดยสามารถติดตั้ง postgreSQL ได้ที่นี้เมื่อโหลดเสร็จแล้วให้โหลดโปรแกรมจัดกันฐานข้อมูลที่ชื่อว่า pgAdmin III เพื่อใช้จัดการกับฐานข้อมูลโดยไม่ต้องใช้คำสั่ง SQL โดยตรง ดาวน์โหลด >>ที่นี่<<
หลังจากติดตั้ง postgreSQL และ pgAdmin เรียบร้อยแล้วให้ติดตั้งไรบรารี่การติดต่อฐานข้อมูลของโพสเกรสโดยใช้คำสั่ง

ถ้าเป็น Linux ใช้คำสั่ง

Code: Select all

sudo apt-get install python-psycopg2
ถ้าเป็น Windows ให้โหลดมาติดตั้ง >>ที่นี่<<

Code: Select all

http://www.stickpeople.com/projects/python/win-psycopg/
หลังจากติดตั้งเสร็จเรียบร้อยแล้วให้ทดสอบโดยการ import (อิมพอร์ท) ตัวไรบรารี่ที่ได้ติดตั้งไว้ โดยใช้คำสั่ง

Code: Select all

import psycopg2 
        con = n.connect(host='localhost', user='postgres', password='1234', port='5432',database='lab_db')	 #ติดต่อฐานข้อมูลโดยตั้งชื่อว่า "con"
        cur = con.cursor() #สร้างตัวแปรเพื่อ "cur" เพื่อเรียกใช้ฟังก์ชั่นอื่นๆ
        cur.execute('SELECT version()') #คำสั่งรันภาษาSQLโดยเรียกเวอร์ชั่นของpostgreSQL
        var = cur.fetchone() #เรียกข้อมูลที่ Query (คิวรี่)มาได้
	print var
ถ้าติดตั้งเสร็จสมบูรณ์ก็จะไม่แสดงข้อผิดพลาดออกมา
และจะแสดงข้อความดังนี้
('PostgreSQL 9.3.13 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4, 64-bit',)
โดยขั้นตอนแรกให้เราเข้าไปสร้างฐานข้อมูลใน postgreSQL
โดยใช้ให้ตารางชื่อ customer ประกอบด้วยฟิวดังนี้
id ประเภท serial
cus_name ประเภท character varrying(30)
cus_email ประเภท character varrying(30)
cus_money ประเภท character varrying(9)
หลังจากนั้นเราจะมาเขียนโปรแกรมเพื่อให้ไพทอนสามารถเพิ่มข้อมูลลงไปบนในฐานข้อมูลได้
โดยจะเขียนคำสั่งเพิ่มข้อมูลในฟังก์ชั่นก่อนถ้าหากยังไม่เข้าใจการเขียนฟังก์ชั่นในภาษาไพทอนสามาศึกษาได้ >>ที่นี่<<
ตัวอย่าง

Code: Select all

def insertData(cus_name,cus_email,cus_money):
    sql = "INSERT INTO customer(cus_name,cus_email,cus_money)\
                VALUES('%s','%s','%s')" %(cus_name,cus_email,cus_money)
    try:
        cur.execute(sql) #รันคำสั่ง SQL
        con.commit() #ถ้าเป็นการเพิ่มข้อมูล, แก้ไข, หรือลบ ต้องมีฟังก์ชั่นนี้ตามหลัง execute 
        print "insert complete"
    except Exception as e:
        print e
ฟังก์ชั่นเรียกดูข้อมูลโดยใช้ชื่อของลูกค้า

Code: Select all

def viewData(name):
    try:
        sql = "SELECT * FROM customer WHERE cus_name = '%%s%'" % (name)
        cur.execute(sql)
        dic = {			
            'data': cur.fetchall(),
            'rows': cur.rowcount
        } 
        return dic #ส่งข้อมูลโดยใช้ตัวแปรประเภท Dictionary เพื่อระบุค่าที่ส่งไปคือ แถวของผลลัพธ์ และข้อมูลที่คิวรี่มาได้
    except Exception as e:
        print e
ฟังก์ชั่นเขียนข้อมูลโดยใช้ไอดีของลูกค้า

Code: Select all

def getData(id):
    sql = "SELECT * FROM customer WHERE id = '%s'" % (id)
    try:
        cur.execute(sql)
        dic = {
            'data': cur.fetchall(),
            'rows': cur.rowcount
        }
        return dic
    except Exception as e:
        print e
ฟังก์ชั่นแก้ไขข้อมูล

Code: Select all

def editData(id,cus_name,cus_email,cus_money):
    sql = "UPDATE customer SET cus_name='%s',\
            cus_email='%s',cus_money='%s'\
            WHERE id = '%s'" % (cus_name,cus_email,cus_money,id)
    try:
        cur.execute(sql)
        con.commit()
        return True
    except Exception as e:
เมื่อเขียนฟังก์ชั่นไว้แล้วทีนี้ก็จะเป็นการเรียกใช้ฟังก์ชั่น
โดยจะใช้ if else เพื่อเป็นการเลือกเมนูและการรับค่าจากคีย์บอร์ดเพื่อใช้กรอกข้อมูล

Code: Select all

while True:
    try:
        # connect to database
        con = n.connect(host='localhost', user='postgres', password='1234', port='5432',database='lab_db')
        cur = con.cursor()
        cur.execute('SELECT version()')
        var = cur.fetchone()
        print "Database Conneted"
    except n.DatabaseError: # some error
        print 'Error %s' %n.DatabaseError
    print "###########################################"
    print "# 1 = add; 2 = find; 3 = edit; 4 = delete #"
    print "###########################################"
    try:
        menu = int(raw_input("what are you doing: "))
    except Exception as e:
        "Input Number Only"

    try:
        if menu == 1 :
            print "#####Customer Add#####"
            cus_name = raw_input("customer name: ")
            cus_email = raw_input("customer email: ")
            cus_money = raw_input("customer money: ")
            insertData(cus_name,cus_email,cus_money)
        elif menu == 2:
            key = raw_input("Enter customer name: ")
            res = viewData(key)
            if(res['rows'] > 0):
                print "#####Customer Detail#####"
                for i in res['data']:
                    print "ID: %s NAME: %s EMAILL: %s MONEY %s" %(i[0],i[1],i[2],i[3])
            else:
                print "Customer not found"
        elif menu == 3:
            print "#####Edit Customer#####"
            getID = raw_input("Enter Customer ID: ")
            res = getData(getID)
            print "rows: ",res['rows']
            if(res['rows'] == 1):
                print "#####Edit#####"
                for i in res['data']:
                    print "ID: %s NAME: %s EMAILL: %s MONEY %s" %(i[0],i[1],i[2],i[3])
                cus_name = raw_input("Name as: ")
                cus_email = raw_input("Email as: ")
                cus_money = raw_input("Money as: ")
                if editData(i[0],cus_name,cus_email,cus_money):
                    print "Edit complete"
                else:
                    print "Edint uncomplete"
        elif menu == 4:
            print "#####Delete Customer"
            getId = raw_input("Enter Customer ID: ")
            res = getData(getId)
            if(len(res) == 1):
                print "Detail"
                for i in res:
                    print "ID: %s NAME: %s EMAILL: %s MONEY %s" %(i[0],i[1],i[2],i[3])
                conf =  raw_input("press y to delete")
                if(conf == 'y' or conf == 'Y'):
                    if deleteData(getId):
                        print "Delete complete"
                    else:
                        print "Delete uncomplete"
                else:
                    print "Cancel"
        else:
            print "Select 1-4"
        con.close()
    except Exception as e:
        print e
        print "Error"
นี่เป็นแค่โปรแกรมพื้นฐานเพื่อใช้แสดงตัวอย่างการทำงานเบื้องต้นของการใช้ไรบารี่ติดต่อฐานข้อมูล postgreSQL ถ้าหากมีข้อสงสัยสามารถตั้งคำถามไว้ใต้หัวข้อนี้ได้เลยครับ

Return to “Python Knowledge”

Users browsing this forum: jesikamoris and 13 guests