elixir やってみる
『taichino.com pythonのORMを色々試してみた』で見かけたelixirが最近心地よい。『mitszoの日記 SQLAlchemy やってみる』のまねまね、のまねまね
#!/usr/bin/env python # -*- coding: utf-8 -*- import elixir from datetime import datetime, timedelta # クラス定義&テーブル定義 class Task(elixir.Entity): elixir.using_options(tablename="tasks") title=elixir.Field(elixir.Text) deadline=elixir.Field(elixir.Date) done_at_=elixir.Field(elixir.Date) def __repr__(self): return "<Task('%s', '%s', '%s')>" % (self.title, self.deadline, self.done_at_) # 接続 elixir.metadata.bind="sqlite:///:memory:" elixir.metadata.bind.echo=True elixir.setup_all() # Create Table elixir.create_all() # インスタンス作ってみる t0=Task(title="test task", deadline=datetime.today()) print t0 print 't0.id=' , t0.id # ここでは None # いきなり commit(insert) elixir.session.commit() print 't0.id=' , t0.id # commit したので None ではなく 1 tomorrow=datetime.today()+timedelta(days=1) # select t1=Task.query.filter(Task.deadline<tomorrow).first() print t1 print 't1.id=' , t1.id # ここでは1
こんなんでました
administrator@cf-t4 ~ $ python tutorials.py 2011-02-25 21:15:23,278 INFO sqlalchemy.engine.base.Engine.0x...b0cc PRAGMA table_info("tasks") 2011-02-25 21:15:23,278 INFO sqlalchemy.engine.base.Engine.0x...b0cc () 2011-02-25 21:15:23,279 INFO sqlalchemy.engine.base.Engine.0x...b0cc CREATE TABLE tasks ( id INTEGER NOT NULL, title TEXT, deadline DATE, done_at_ DATE, PRIMARY KEY (id) ) 2011-02-25 21:15:23,279 INFO sqlalchemy.engine.base.Engine.0x...b0cc () 2011-02-25 21:15:23,280 INFO sqlalchemy.engine.base.Engine.0x...b0cc COMMIT <Task('test task', '2011-02-25 21:15:23.281075', 'None')> t0.id= None 2011-02-25 21:15:23,282 INFO sqlalchemy.engine.base.Engine.0x...b0cc BEGIN 2011-02-25 21:15:23,283 INFO sqlalchemy.engine.base.Engine.0x...b0cc INSERT INTO tasks (title, deadline, done_at_) VALUES (?, ?, ?) 2011-02-25 21:15:23,284 INFO sqlalchemy.engine.base.Engine.0x...b0cc ('test task', '2011-02-25', None) 2011-02-25 21:15:23,284 INFO sqlalchemy.engine.base.Engine.0x...b0cc COMMIT t0.id=2011-02-25 21:15:23,286 INFO sqlalchemy.engine.base.Engine.0x...b0cc BEGIN 2011-02-25 21:15:23,287 INFO sqlalchemy.engine.base.Engine.0x...b0cc SELECT tasks.id AS tasks_id, tasks.title AS tasks_title, tasks.deadline AS tasks_deadline, tasks.done_at_ AS tasks_done_at_ FROM tasks WHERE tasks.id = ? 2011-02-25 21:15:23,287 INFO sqlalchemy.engine.base.Engine.0x...b0cc (1,) 1 2011-02-25 21:15:23,289 INFO sqlalchemy.engine.base.Engine.0x...b0cc SELECT tasks.id AS tasks_id, tasks.title AS tasks_title, tasks.deadline AS tasks_deadline, tasks.done_at_ AS tasks_done_at_ FROM tasks WHERE tasks.deadline < ? LIMIT 1 OFFSET 0 2011-02-25 21:15:23,290 INFO sqlalchemy.engine.base.Engine.0x...b0cc ('2011-02-26 21:15:23.288206',) <Task('test task', '2011-02-25', 'None')> t1.id= 1