Python - Database (PostgreSQL)

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

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

m028
PHP Super Member
PHP Super Member
Posts: 325
Joined: 01/07/2015 9:37 am

Python - Database (PostgreSQL)

Post by m028 »

ภาษา Pythonสามารถทำงานเชื่อมต่อกับฐานข้อมูล ได้เหมือนภาษาอื่นๆ ซึ่งในบทความนี้ จะเป็นการเขียน Python ให้เชื่อมต่อกับฐานข้อมูลเบื้องต้นโดยใช้ฐานข้อมูล PostgreSQL ทำการเพิ่ม แก้ไข หรือ ลบข้อมูลด้วย

ซึ่งจะมีดังนี้

การเขียน Python ให้เชื่อมต่อกับฐานข้อมูล

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    # connect to database
    con = n.connect(host='localhost', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    cur.execute('SELECT version()')
    var = cur.fetchone()
    print var
    
except n.DatabaseError: # some error
    print 'Error %s' %n.DatabaseError
    
if con:
    con.close() 
จากโค้ดจะเป็นการเชื่อมต่อฐานข้อมูล PostgreSQL และเขียนดูเวอร์ชั่นของ PostgreSQL
เมื่อรันออกมาแล้วจะเป็นแบบนี้

Code: Select all

('PostgreSQL 9.3.9 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4, 64-bit',)
ปล. ไม่สามารถเขียนสร้าง Database จากการเขียน Python ได้ วิธีแก้ไขต้องไปตั้งค่าที่ configuration ของ PostgreSQL ก่อนหรือไม่ก็ไปทำการสร้างในฐานข้อมูลโดยตรงก็ได้ โดยใช้ คำสั่ง SQL

Code: Select all

CREATE DATABASE test
การสร้างตาราง
จะใช้คำสั่ง SQL ในการสร้างตาราง

Code: Select all

CREATE TABLE table_name
จะเขียนโดย Python ดังนี้

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None
try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    # Drop test table
    cur.execute("DROP TABLE IF EXISTS test_python")
    print "Drop test_python table is compeleted"
    
    # Create table as per requirement
    sql = """CREATE TABLE IF NOT EXISTS test_python(
            id serial NOT NULL,
            first_name character varying(100) NOT NULL,
            last_name character varying(100) NOT NULL,
            favorite_color character varying(100),
            CONSTRAINT test_python_pkey PRIMARY KEY (id)
            )"""
    
    cur.execute(sql)
    con.commit()
    print "Create test_python table is compeleted"
    
except n.DatabaseError: # some error
    print 'Error %s' %n.DatabaseError

if con:
    con.close()
จากโค้ด เมื่อรันแล้วจะแสดงออกมาเป็นแบบนี้

Code: Select all

Drop test_python table is compeleted
Create test_python table is compeleted
ให้ไปดูที่ฐานข้อมูลจะเห็นว่ามีตารางชื่อว่า test_python ถูกสร้างขึ้นมาใหม่
Image

การเพิ่มข้อมูล
จะใช้คำสั่ง SQL ในการเพิ่มข้อมูล

Code: Select all

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
จะเขียนโดย Python ดังนี้

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    
    sql = """INSERT INTO test_python (first_name, last_name, favorite_color)
            VALUES ('Jack', 'Man', 'Yellow')"""
    sql = sql.encode('utf-8')
    
    try:
        cur.execute(sql)
        con.commit()
        print 'Insert compelete'
    except:
        con.pollback()
        print 'Insert False'

except n.Error:
    print 'Connection error'
    
if con:
    con.close()
จากโค้ด เมื่อรันแล้วจะแสดงออกมาเป็นแบบนี้

Code: Select all

Insert compelete
ให้ไปดูที่ฐานข้อมูลชื่อว่า test_python จะมีข้อมูลที่เพิ่มเข้าไป
Image

การเขียน Python ให้รับข้อมูลจาก Keyboard
จะใช้คำสั่ง Insert เหมือนเดิมแต่จะทำการวนลูปรับค่าจาก Keyboard

Code: Select all

 while loop==1:
        firstname = raw_input('Input Your First Name : ')
        lastname = raw_input('Input Your Last Name : ')
        color = raw_input('Input Your Favorite color : ')
        if firstname=='esc' or lastname=='esc' or color=='esc':
            loop = 0
            continue
        sql = "INSERT INTO test_python (first_name, last_name, favorite_color) \
            VALUES ('%s', '%s', '%s')" % (firstname, lastname, color)
        sql = sql.encode('utf-8')
จากโค้ดจะมีการกำหนดว่า ถ้าใส่ esc ไป จะเป็นการจบสิ้นการรับข้อมูล

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    
    loop = 1
    while loop==1:
        firstname = raw_input('Input Your First Name : ')
        lastname = raw_input('Input Your Last Name : ')
        color = raw_input('Input Your Favorite color : ')
        if firstname=='esc' or lastname=='esc' or color=='esc':
            loop = 0
            continue
        sql = "INSERT INTO test_python (first_name, last_name, favorite_color) \
            VALUES ('%s', '%s', '%s')" % (firstname, lastname, color)
        sql = sql.encode('utf-8')
    
    try:
        cur.execute(sql)
        con.commit()
        print 'Insert compelete'
    except:
        con.pollback()
        print 'Insert False'

except n.Error:
    print 'Connection error'
    
if con:
    con.close()
ให้ไปดูที่ฐานข้อมูลชื่อว่า test_python จะมีข้อมูลที่เพิ่มเข้าไป
Image

การเขียน Python ให้แสดงข้อมูล
จะใช้คำสั่ง SELECT มาวนปริ้น

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    
    sql = "SELECT * FROM test_python WHERE id <> 0"
    sql = sql.encode('utf-8')
    cur.execute(sql)
    
    results = cur.fetchall()
    
    for row in results:
        id = row[0]
        first_name = row[1]
        last_name = row[2]
        favorite_color = row[3]
        print "First Name : %s" %first_name
        print "Last Name : %s" %last_name

except n.Error:
    print 'Connection error'
    
if con:
    con.close()
เมื่อรันแล้วจะแสดงแบบนี้

Code: Select all

First Name : Jack
Last Name : Man
First Name : boy
Last Name : um
First Name : gril
Last Name : um
การแก้ไขข้อมูล
จะใช้คำสั่ง SQL ในการแก้ไขดังนี้

Code: Select all

UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    
    sql = "UPDATE test_python SET first_name = 'Rose' WHERE id = 1"
    
    try:
        cur.execute(sql)
        con.commit()
        print "Update compelete"
    except:
        con.rollback()
        print "Update False"

except n.Error:
    print 'Connection error'
    
if con:
    con.close()
ให้ไปดูที่ฐานข้อมูลชื่อว่า test_python จะมีข้อมูลที่แก้ไข
Image

การลบข้อมูล
จะใช้คำสั่ง SQL ในการลบข้อมูลดังนี้

Code: Select all

DELETE FROM table_name
WHERE some_column=some_value; 

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    
    sql = "DELETE FROM test_python WHERE id > '%d'" %(1)
    
    try:
        cur.execute(sql)
        con.commit()
        print "Delete compelete"
    except:
        con.rollback()
        print "Delete False"

except n.Error:
    print 'Connection error'
    
if con:
    con.close()
จากโค้ดรันแล้วจะทำการลบข้อมูลที่ id มากกว่า 1 แล้วให้ไปดูที่ฐานข้อมูลชื่อว่า test_python จะมีข้อมูลที่เหลืออยู่
Image

การลบตาราง
จะใช้คำสั่ง SQL ในการลบตารางดังนี้

Code: Select all

DROP TABLE table_name

Code: Select all

# -*- coding=utf-8 -*-
import psycopg2 as n

con = None

try:
    con = n.connect(host='localhost', database='test', user='postgres', password='postgres', port='5432')
    cur = con.cursor()
    
    sql = "DROP TABLE test_python"
    
    cur.execute(sql)
    con.commit()
    print "Drop table compelete"

except n.Error:
    print 'Connection error'
    
if con:
    con.close()
เมื่อรันแล้ว table ชื่อ test_python จะหายไป

User avatar
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
Posts: 24181
Joined: 22/09/2008 6:18 pm
Contact:

Re: Python - Database (PostgreSQL)

Post by mindphp »

ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042

Post Reply
  • Similar Topics
    Replies
    Views
    Last post

Return to “Python Knowledge”

Who is online

Users browsing this forum: No registered users and 1 guest