from sqlalchemy import *
from sqlalchemy.orm import *
import datetime
engine = create_engine(“sqlite:///:memory:”)
metadata = MetaData()
users = Table('users', metadata,
Column('user_id', Integer, primary_key=True),
Column('username', String(40), unique=True),
Column('password', String(32)),
Column('email', String(25)))
posts = Table('posts', metadata,
Column('id', Integer, primary_key=True),
Column('pub_date', DateTime),
Column('user_id',Integer, ForeignKey('users.user_id')),
Column('title', String(70)),
Column('text', String))
metadata.create_all(engine)
class User(object):
def __init__(self, name, passwd, email):
self.username = name
self.password = passwd
self.email = email
def __repr__(self):
return ‘User %s’%self.username
class Post(object):
def __init__(self, date, title, text):
self.pub_date = date
self.title = title
self.text = text
def __repr__(self):
return ‘Post %s:%s (%s)’%(self.user.username, self.pub_date, self.title)
def formattedText(self):
‘'’Do formatting here'''
ret = self.text.capitalize()
return ret
mapper(User, users, properties={
‘posts’ : relation(Post, backref='user', cascade=“all, delete, delete-orphan”),
})
mapper(Post, posts)
Session = sessionmaker(bind=engine, transactional=True)
session = Session()
u = User('John', ‘pass’, ‘
john@company.com’)
session.save(u)
u.posts.append(Post(datetime.datetime.now(), ‘title’, ‘non formatted text’))
session.flush()
p = session.query(Post).filter(Post.id==1).one()
print p.id, p.user.username, p.pub_date, p.title, p.formattedText()
Внимание, используются некоторые специфические для 0.4.0 конструкции. Сейчас эта ветка - рабочая в trunk svn. Не пройдет и месяца, как станет официальным релизом.