debian: เกร็ด Adodb for Python

Topic: 
 

Adodb for Python เป็น API สำหรับให้ไพธอนติดต่อกับฐานข้อมูลใด ๆ
ข้อดีคือสามารถเปลี่ยนฐานข้อมูลโดยไม่ต้องเปลี่ยนคำสั่งการติดต่อ
ข้อเสียคือมีชั้นการรันเพิ่ม ทำให้เข้าถึงข้อมูลช้าลง

มีเอกสารภาษาไทยอยู่ที่ Exzilla.net - ADOdb MySQL Tutorial (Thai Translation)

การติดตั้ง

ในที่นี้จะเขียนแค่ postgresql
# aptitude install python python-adodb postgresql-8.1 psycopg

ตัวอย่างการใช้งาน

import adodb;
conn = adodb.NewADOConnection('postgres')
conn.Connect('server','user','pwd','db')
cursor = conn.Execute('select * from table')
while not cursor.EOF:
	print cursor.fields
	cursor.MoveNext()
#
cursor.Close()
conn.Close()

ตัวอย่างต่อไปแปลงมาจาก ADOdb Library for PHP ผิด ตก ยก เว้น

  • ตัวอย่าง select
    import adodb
    conn = adodb.ADONewConnection('access')
    cursor = conn.Connect('northwind')
    rs = conn.Execute('SELECT * FROM products')
    if not rs:
      print conn.ErrorMsg()
    else:
      while not rs.EOF:
        print "%s %s <br />" % (rs.fields[0], rs.fields[1])
        rs.MoveNext()
      #
    #
    rs.Close()    # optional
    conn.Close()  # optional
  • ตัวอย่าง select แบบมีฟิลด์ออปเจกต์
    import adodb
    conn = adodb.ADONewConnection('access')
    cur = conn.Connect('northwind')
    rs = conn.Execute('SELECT CustomerID, OrderDate FROM Orders')
    if not rs:
      print conn.ErrorMsg
    else:
      while not rs.EOF:
        field = rs.FetchField(1)
        metatype = rs.MetaType(field.type)
        if metatype=='D' or metatype=='T':
          print "%s %s <br />" % (rs.fields[0], rs.fields[1])
        else:
          print "%s <br />" % (rs.fields[0])
        #
        rs.MoveNext()
      #
    #
    rs.Close()    # optional
    conn.Close()  # optional
  • การ Insert
    import adodb
    import datetime
    conn = adodb.ADONewConnection('access')
    cur = conn.Connect('northwind')
    shipto = conn.qstr("John's Old Shoppe")
    sql = "INSERT INTO orders (CustomerID,EmployeeID,OrderDate,ShipName)" \
        + " VALUES ('ANNATR', 2, %s, %s" \
        % (conn.DBDate(datetime.datetime.now()), shipto)
    if not conn.Execute(sql):
      print "Error insertion: %s <br />" % (conn.ErrorMsg())
    #
  • การ Debug
    import adodb
    import datetime
    conn = adodb.ADONewConnection('access')
    cur = conn.Connect('northwind')
    shipto = conn.qstr("John's Old Shoppe")
    sql = "INSERT INTO orders (CustomerID, EmployeeID, OrderDate, ShipName)"\
          + " VALUES ('ANATR', 2, %s, %s)" \
          % (conn.FormatDate(datetime.datetime.now()), shipto)
    conn.debug = True
    if not conn.Execute(sql):
      print "Error inserting"
    #

Error Handling
วิธีไพธอน
import sys
try:
  curs = conn.Execute('select * from badtable')    # table does not exist
except:
  print sys.exc_info()[1]    # retrieve the error message returned by database

วิธียืมจาก php - ต้องปิด useExceptions ก่อน

conn.useExceptions = False
curs = conn.Execute('select * from badtable')    # table does not exist
if curs == None: 
  print conn.ErrorMsg()
 

Syndicate

Subscribe to Syndicate

Who's online

There are currently 0 users online.