จากเรื่องที่เขียนก่อนหน้านี้ก็คงจะพอเห็นว่าใช้ SQLAlchemy ตรงเขียนเหนื่อยเหมือนกัน แถมเป็นท่าที่ไม่คุ้นเคย. ปกติถ้าเป็น SQLObject, Activerecord หรือแม้แต่ Hibernate เราก็จะเขียนวิธี map ลงไปใน class เลย. Elixir ก็เป็น layer ที่ทำงานนี้โดยไปเรียก SQLAlchemy อีกที. แต่ก่อนอาจจะเคยได้ยินชื่อ ActiveMapper และ TurboEntity อยู่บ้าง แต่เท่าที่อ่านมา คนเขียน project ที่ว่าก็มาร่วมมือกันทำ Elixir แล้ว.
ใช้ Elixir แล้วก็เริ่ม เขียน class ที่จะ map กับ database เลย
model.py:
from elixir import *metadata.connect("postgres://username@localhost/play1")
class Entry(Entity):
has_field('id', Integer, primary_key = True)
has_field('headword', Unicode(1024))
has_field('xml', TEXT)
def __repr__(self):
return "entry " + "id=" + str(self.id) + " "
+ "headword=" + self.headword.encode("UTF-8") + " "
+ "xml=" + self.xml.encode("UTF-8")
has_field ก็คือการบอกว่า attribute ใน object จะ map ไปเป็น field อะไรใน table ของ relational database. อีกไฟล์นึงก็มาเรียกใช้เลย
from model import * create_all() Entry(headword="cat", xml="<entry/>") objectstore.flush()
ก็ใช้ได้สบายๆ table ก็สร้างแล้วข้อมูลก็ insert ไปเรียบร้อย แต่ยังไม่ได้ ชื่อ table แบบที่ต้องการเพราะจะเอาไปใช้กับ database ที่มีอยู่แล้ว.
ได้ table ออกมาชื่อ model_entity แล้วก็จะหาวิธีเปลี่ยนดู ในการเขียนครั้งหน้า.
ป้าย: elixir example simple postgresql sqlalchemy orm
