from beaker import cache
from sqlalchemy import *
from sqlalchemy.orm import mapper, sessionmaker, scoped_session,
relationship
from sqlalchemy.types import *
# from examples/beaker_caching
from eps.model import caching_query
### INIT
cache_manager = cache.CacheManager()
metadata = MetaData()
engine = create_engine('postgresql+psycopg2://
LOGIN:[email protected]:5432/DBNAME', echo=False)
Session = scoped_session(sessionmaker(autoflush=True,
autocommit=False,
query_cls=caching_query.query_callable(cache_manager), bind=engine))
cache_manager.regions['default'] = {
'type': 'memory',
'lock_dir': '/tmp',
}
### END INIT
### TABLES
# groups
groups_table = Table('groups', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(255), unique=True, nullable=False)
)
class Group(object):
def __init__(self, name):
self.name = name
mapper(Group, groups_table)
# users
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('username', String(255), unique=True, nullable=False),
Column('first_name', Unicode(255), nullable=False),
Column('last_name', Unicode(255), nullable=False),
Column('middle_name', Unicode(255), nullable=False)
)
# users_groups
users_groups_table = Table('users_groups', metadata,
Column('user_id', Integer, ForeignKey('users.id')),
Column('group_id', Integer, ForeignKey('groups.id'))
)
class User(object):
def __init__(self, username, first_name, last_name, middle_name):
self.username = username
self.first_name = first_name
self.last_name = last_name
self.middle_name = middle_name
mapper(
User,
users_table,
properties={
'groups': relationship(Group, lazy=True,
secondary=users_groups_table, backref='users')
}
)
cache_user_relationships = caching_query.RelationshipCache('default',
'by_id', User.groups)
### END TABLES
### HELPERS
def get_user(username):
return Session.query(User).\
options(cache_user_relationships).\
options(caching_query.FromCache('default',
'by_username')).\
filter_by(username=username).one()
def print_groups(user):
for g in user.groups:
print g.name
### END HELPERS
### CREATE
metadata.create_all(engine)
### END CREATE
### POPULATE
u1 = User('sector119', u'A', u'B', u'C')
u1.groups = [Group('G1')]
u2 = User('sector120', u'D', u'E', u'F')
u2.groups = [Group('G2')]
Session.add_all([u1, u2])
Session.commit()
### END POPULATE
### TEST ...
u = get_user('sector119')
print '1. %s groups:' % u.username
print_groups(u)
print '2. %s groups:' % u.username
print_groups(u)
u = get_user('sector120')
print '1. %s groups:' % u.username
print_groups(u)
print '2. %s groups:' % u.username
print_groups(u)
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.