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.

Reply via email to