Sufficiency Economy
Group Blog
 
All blogs
 

Python ติดต่อฐานข้อมูล Access

ตอนนี้มาเรื่องฐานข้อมูลกันบ้าง ฐานข้อมูลที่ชอบใช่กันก็พวก ms access
mysql sqlite แต่วันนี้เอา ms access ก่อนดีกว่า
source code คลิ๊กเลย




มาเริ่มกันเลย อย่างแรกต้อง download module "pyodbc" มาติดตั้งก่อน
จากที่นี้เลย ไซด์นี้เลย //code.google.com/p/pyodbc/ หรือ d/l ตรงก็ที่นี้pyodbc

เมื่อติดตั้งเสร็จ ทดสอบ ลองพิมพ์คำสั่ง import pyodbc ถ้าไม่ error ก็แปลว่าติดตั้งใช้งานได้แล้ววว

ผมได้สร้างฐานข้อมูล MS Access ชื่อ school และมี table ชื่อ student
มีสาม Fields คือ ID FName LName : เลขประจำตัว ชื่อ นามสกุล ตามลำดับ

ต่อไปมาสู่การเขียน code
import pyodbc
เรียกใช้ module pyodbc

db = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb)};DBQ=school.mdb')
ทำการเชื่อมต่อฐานข้อมูลโดยระบุ driver
DRIVER={Microsoft Access Driver (*.mdb)};

และบอกที่อยู่ของฐานข้อมูล access เช่น ฐานข้อมูลอยู่ที่
d:homepythondbschool.mdb ก็เขียนแบบนี้
DBQ=d:homepythondbschool.mdb
แต่ในที่นี้เพื่อง่ายเลยให้โปรแกรมกับฐานข้อมูลอยู่ที่เดียวกันเลยกำหนดเป็น
DBQ=school.mdb

ถ้าฐานข้อมูลมี password ก็กำหนด
UID=admin;PWD=xxx
เราจะคั่นข้อมูลด้วยเครื่องหมาย ; นะครับ
แต่ในที่นี้ไม่มีpass เลยไม่ใส่

เมื่อติดต่อได้แล้ว ก็เรียก method cursor เพื่อสร้าง object cursor ทำให้เราสามารถใช้คำสั่ง sql ได้ ผ่าน method execute และอ่านข้อมูลที่ query ผ่าน method fetchall อีกทั้งอ่านข้อมูล schema ของ table ได้ด้วย เป็นต้น

cursor = db.cursor()
cursor.execute("select * from student")
rs = cursor.fetchall()

มาถึงคำสั่งนี้ เราก็ได้ข้อมูล student มาเก็บที่ตัวแปร rs แล้ว (ตั้งชื่ออื่นก็ได้น่า แต่ติดมาจาก vb ที่ย่อมาจาก recordset)
การเรียกข้อมูล ก็ทำตามนี้
for row in rs:
disp.insert(INSERT,row[0]+ "t" + row[1] + "t" +row.LName+"n")

โดยเรียกข้อมูลที่ละ แถว(row) มาแสดง โดยระบุ index เช่น
row[0] หมายถึง ID
แต่ถ้าเราจำ index ไม่ได้ ก็ให้ระบุเป็นชื่อ Field ได้เหมือนกัน เช่น
row.LName

เมื่อแสดงเสร็จ ก็ปิด ฐานข้อมูลด้วยคำสั่ง
db.close

ในตัวอย่างนี้เราใช้ GUI Text เพื่อแสดงข้อมูล
root = Tk()
disp = Text(root)
disp.pack()

และแสดงข้อมูลด้วยคำสั่ง
disp.insert(INSERT,row[0]+ "t" + row[1] + "t" +row.LName+"n")
จากที่อธิบายข้างต้น ตรง row.LName จะเปลี่ยนเป็น row[2] ก็ได้นะครับ

สุดท้าย web python ดีๆ ที่ใช้ศึกษา ก็ที่นี้เลย //www.tutorialspoint.com/python/




 

Create Date : 16 เมษายน 2554    
Last Update : 16 เมษายน 2554 20:46:56 น.
Counter : 2168 Pageviews.  

Python ทดลองเขียนโปรแกรมเครื่องคิดเลข บวก ลบ ตอนที่2

ครั้งที่แล้วเป็นการเขียนโปรแกรมให้แสดงตัวเลขที่กด
ต่อไปเรามาเขียนโปรแกรมในส่วน การกดเครื่องหมาย บวก ลบ และ เท่ากับ
เพื่อง่ายต่อการเขียนโปรแกรม เราจะบวก ลบเลข เพียง สองจำนวนเท่านั้นนะครับ
ดังนั้นจะม่ีข้อมูลตัวเลข ชุดที่1 แล้ว เครื่องหมายบวก หรือลบ และตามด้วยตัวเลขชุดที่2 เช่น
50+60 ข้อมูลจะถูกเก็บใน list1 = ['50', '+', '60']

การอ้างข้อมูลใน list ก็ใส่ index ให้มัน เช่น
list1[0] = '50'
list1[1] = '+'
list1[2] = '60'

การเพิ่มข้อมูลเข้าไปใน list จะใช้ method append เช่น
list1.append('7') จะใส่ข้อมูล '7' เข้าไปต่อท้าย list1 ผลลัพธ์ ก็จะเป็น
['50', '+', '60', '7']

การกำหนดการเริ่มต้นของ list ก็ใช้ list1 = []

อีกสิ่งที่ต้องควรรู้คือ ตัวแปรแบบ global เพราะมีการใช้ตัวแปร tmpStr และ list1 ภายใน function (def) จึงต้องประกาศตัวแปรแบบ global ดังนี้
global list1
global tmpStr

ต่อไปเรามาดูรายละเอียดของ ฟังก์ชั่นกัน
def callbackPM(str): เมื่อกดเครื่องหมาย บวก หรือลบ จะเรียกฟังก์ชั่นนี้
global list1 ประกาศตัวแปรแบบ global
global tmpStr

disp['text'] = disp['text']+str
print tmpStr
print str
list1.append(tmpStr) เก็บตัวเลขชุดที่ 1ใส่ใน list1
list1.append(str) เก็บเครื่องหมาย บวก หรือ ลบ ในlist1
print list1
tmpStr ="" clear tmpStr เพื่อเก็บค่าตัวเลข ชุดใหม่


def cal(): เมื่อกดเครื่องหมายเท่ากับ จะเรียกฟังก์ชั่นนี้
global list1 ประกาศตัวแปรแบบ global
global tmpStr
list1.append(tmpStr) เก็บตัวเลขชุดที่ 2ใส่ใน list1
result = 0
if list1[1] == '+': ตรวจสอบถ้าเป็นเครื่องหมายบวก ก็บวกกัน
result = int(list1[0])+int(list1[2])
elif list1[1] == '-': ตรวจสอบถ้าเป็นเครื่องหมายลบ ก็ลบกัน
result = int(list1[0])-int(list1[2])

disp['text'] = str(result) แสดงผลลัพธ์
list1 = []
tmpStr = str(result)

print list1
print tmpStr

code เต็มๆ download ตรงนี้ครับ




 

Create Date : 15 เมษายน 2554    
Last Update : 15 เมษายน 2554 22:03:36 น.
Counter : 2735 Pageviews.  

Python ทดลองเขียนโปรแกรมเครื่องคิดเลข บวก ลบ ตอนที่1

หลังจากเล่นน้ำสงกรานต์ กันชุ่มช้ำ ก็มาเขียน python กันต่อ
ครั้งนี้ทดลองเขียนโปรแกรมเครื่องคิดเลข เฉพาะเครื่องหมายบวกกับลบ ง่ายๆ จะได้ศึกษาเรื่องการสร้าง Label, ปุ่มกด(button), การLayout, ฟังก์ชั่น (def) และเรื่อง lambda (อันนี้งงมาก)



มาดูcode กันเลย ตัวเต็ม download ได้ที่นี้นะครับ

from Tkinter import * เพื่อบอกว่าจะใช้ module จาก Tkinter

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
สามบรรทัดนี้สำหรับให้แสดงผลภาษาไทย ที่ net บอกว่า ใช้ utf-8 ง่ายกว่า

root = Tk() สร้าง หน้าจอหลัก
frame = Frame(root) สร้าง frame เพื่อใช้ในการจัด Layout
frame.pack() เป็น method สำหรับจัดการ widgets ก่อนกับใส่ใน parent window ซึ่งสามารถใช้ parameter เป็น LEFT RIGHT TOP BOTTOM

bframe = Frame(frame)
bframe.pack(side = BOTTOM)

b2frame = Frame(bframe)
b2frame.pack(side = BOTTOM)

b3frame = Frame(b2frame)
b3frame.pack(side = BOTTOM)
จากที่อธิบายข้างต้นตอนนี้เป็นการจัดการให้เกิดการจัด Layout ของแถวwidgets จำนวน 3 แถว ถ้ารวม frame ก็เป็น 4 แถว
ที่จริงการจัด layout นอกจากใช้ pack ยังมีแบบ place กับ grid อีก แต่ยังไม่ได้อ่าน

dispL = Label(frame, text="กรอกตัวเลขได้เลยครับ" )
dispL.pack()
การสร้าง Label ก็ง่ายๆ แค่ระบุว่าจะสร้างที่ widget อะไร และใส่ข้อความอะไร เสร็จแล้วก็ pack ส่ะ
ถ้าต้องการให้ขึ้นบรรทัดใหม่ ก็ใส่ back slash กับตัวอักษร n

disp = Label(frame, text="" )
disp.pack()
อันนี้เอาไว้แสดงว่าเรากดปุ่มอะไรบ้าง

n7 = Button(frame, text="7", padx=8, command = lambda b='7': callback(b))
n7.pack(side = LEFT)
การใส่ปุ่มกดก็คล้ายๆ Label แต่เพิ่ม การขยายขนาดก็ปุ่มคือ padx
การเรียกฟังก์ชั่นผ่าน command
โดยกรณีที่เราไม่ได้ส่งค่าไปให้ฟังก์ชั่น เราสามารถเขียนว่า command = callback ได้
แต่ถ้ามีการส่งค่าจะเขียน command = callback('7') ไม่ได้ งงเหมือนกันตรงจุดนี้

เลยไปหาข้อมูลจาก net เขาบอกว่าต้องใช้ lambda ช่วยก็จะเป็นแบบข้างบนรายละเอียดลองดู//www.secnetix.de/olli/Python/lambda_functions.hawk อ่านก็คง งงๆ อีก

ต่อไปก็เรื่องการเขียนฟังก์ชั่น
def callback(str):
disp['text'] = disp['text']+str
print str
ฟังก์ชั่นนี้เพื่อแสดงข้อมูล จะสังเกตเห็นว่ามันไม่มี จุดบอกจุดสิ้นสุดของ ฟังก์ชั่น ดังนั้นมันใช้การย่อหน้าาาาาาา ทำไมมันไม่ออกแบบว่าต้องเขียน end def หว่า

disp['text'] เป็นรูปแบบการอ้างถึงค่าproperties ใน Label ในที่นี้ก็คือ text

root.mainloop() ก็นี้ก็เป็น mainloop ที่ต้องใส่ไว้ท้ายโปรแกรม
ส่วนการคำนวณเอาไว้คร่าวหน้าครับ




 

Create Date : 14 เมษายน 2554    
Last Update : 14 เมษายน 2554 18:50:03 น.
Counter : 7993 Pageviews.  

Python Step by Step ^ ^

พอดีโดน comment ว่าเขียนไม่รู้เรื่อง เลยทำแบบ step by step เพื่อเป็นแนวทางเผื่อสนใจ
1.ติดตั้งโปรแกรม python version 2.7.1 ที่ //www.python.org หรือ link นี้ได้เลย //www.python.org/ftp/python/2.7.1/python-2.7.1.msi
เมื่อติดตั้งเสร็จได้โปรแกรมตามรูป




เมื่อ run โปรแกรม โดย Double click ที่ คำว่า "Python (command line) จะได้หน้าจอแบบนี้




โปรแกรมก็จะขึ้นเครื่องหมายpromt ">>>" เพื่อรอรับคำสั่งแล้ว
เราลองพิมพ์ 10+20 แล้วกดปุ่ม Enter ก็จะได้ผลลัพธ์ เป็น 30
หรือลองพิมพ์ 50/5 แล้วกดปุ่ม Enter ก็จะได้ผลลัพธ์เป็น 10 ตามรูป



จะเห็นได้ว่าเป็นเครื่องคิดเลขแบบง่ายๆ ได้เลย
และถ้าต้องการออกจากโปรแกรม ก็พิมพ์คำว่า exit() หรือ กดปุ่ม Ctrl และปุ่ม Z พร้อมๆ กันก็ได้

ต่อไปถ้าต้องการเขียนcode ก็เขียนที่ละบรรทัด แล้วกดปุ่ม enter เมื่อจบบรรทัด จนถึงคำสั่งสุดท้าย ในที่นี้ก็คือคำสั่ง root.mainloop()
มันก็จะ run โปรแกรมให้ ตามรูป(ที่จริงมันจะ execute คำสั่งทุกครั้งที่เรากดปุ่ม Enter)





แต่ถ้าโปรแกรมยาว การเขียนใส่ไฟล์แล้วให้มีนามสกุล .py แล้ว run จะง่ายกว่าในที่นี้ใช้ Program Notepad++
ตอนนี้ก็น่าจะพอเข้าใจนะครับ




 

Create Date : 09 เมษายน 2554    
Last Update : 9 เมษายน 2554 10:34:09 น.
Counter : 846 Pageviews.  

ทดลองใช้ Python

ตอนนี้กำลังหา ภาษา ที่เหมาะสมในการเขียนโปรแกรม เล็กๆ บน window
และต้องเป็นพวก freeware ด้วย พวกกึ่งๆ เช่น visual studio express ไม่เอา ถึงแม้มันจะทำมาให้ใช้งานง่ายๆ ก็ตาม

ตอนแรกก็มองๆ java โดยใช้บน netbeans framework ทดลองแล้วไม่ไหว ยุ่งยากเกินไป หาไปหามาก็มาจบที่ python ดูคล้ายภาษาแบบ script ที่ไม่ค่อยยุ่งยาก แต่คงให้ได้โปรแกรมเหมือนพวก java หรือ vb.net ก็ไม่ได้ แต่คิดว่าน่าจะเหมาะแก่การทำงานเล้กๆ เช่น ... อืมยังไม่บอกดีกว่า เด๋วไม่สำเร็จจะอายคนอื่นเขา

=============================
เครื่องที่ใช้ window 7
ลง python 2.7.1 ยังไม่ลง version 3 เพราะเห็นว่า โปรแกรม plugin บางโปรแกรมยังไม่ support เห็นใน web เขาว่ากันอย่างนั้น
ใช้ GUI Tkinter แต่ถ้าพอรู้แล้วคงไปใช้ ttk และ tix แล้วที่ยังไม่ใช้ wxpython เพราะขี้เกียจลงเพิ่ม มีเหตุผลนะเนี่ย
คู่มือก็ดูจาก //www.pythonware.com/library/tkinter/introduction/

=============================
อย่างแรก ก็ทดลอง Sawadee World กัน
code ก็ประมาณนี้
from Tkinter import *
root = Tk()
w = Label(root, text="Sawadee world")
w.pack()
root.mainloop()
=============================

ต่อไปก็ต้องการแสดงภาษาไทย ตอนแรกก็คิดว่าแค่เปลี่ยน คำว่า sawadee เป็น สวัสดี ก็หมดเรื่อง แล้วทดลอง run ก็ได้ error ส่ะ

ไปค้นๆ ใน net ก็พบว่าต้องมีการ encode decode อะไรประมาณนี้
ลองมั่วๆ เดาๆ ก็ได้ประมาณนี้

# -*- coding: Tis-620 -*-
from Tkinter import *
root = Tk()
w = Label(root, text="สวัสดี".decode('Tis-620')+" hello")
w.pack()
root.mainloop()

ที่จริงอาจมีหลายวิธี แต่เอาแบบนี้ไปก่อนละกัน
ผลลัพธ์ ก็ได้ประมาณนี้




อีกอย่างก็เปลี่ยนมาใช้ editor ที่ชื่อว่า
Notepad++ แทน Notepad ของคุณ window




 

Create Date : 08 เมษายน 2554    
Last Update : 8 เมษายน 2554 21:20:10 น.
Counter : 1193 Pageviews.  

1  2  3  4  5  6  

wink99_th
Location :
พิษณุโลก Thailand

[Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 8 คน [?]




New Comments
Friends' blogs
[Add wink99_th's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.