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