[sqlalchemy] Re: something wrong with relationship caching at _trunk_
Thank you, Michael! On 22 Грд, 18:38, Michael Bayer wrote: > Thank you, please apply the change in r9327b3748997 to your > _params_from_query() function. > > On Dec 22, 2010, at 5:47 AM, sector119 wrote: > > > > > > > > > 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:passw...@127.0.0.1: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 sqlalch...@googlegroups.com. > > To unsubscribe from this group, send email to > > sqlalchemy+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/sqlalchemy?hl=en. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
Re: [sqlalchemy] Re: something wrong with relationship caching at _trunk_
Thank you, please apply the change in r9327b3748997 to your _params_from_query() function. On Dec 22, 2010, at 5:47 AM, sector119 wrote: > 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:passw...@127.0.0.1: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 sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
[sqlalchemy] Re: something wrong with relationship caching at _trunk_
Work correctly at changeset: 56917428859f Work wrong at changeset: 111017b8beaf changeset: 7043:111017b8beaf parent: 7040:7619cb5219ca parent: 7042:56917428859f user:zzzeek date:Fri Nov 26 16:28:41 2010 -0500 summary: - merge mapper simpler compile branch, [ticket:1966] changeset: 7042:56917428859f parent: 7041:6139773eaa41 parent: 6926:107643a1453c user:zzzeek date:Thu Nov 18 19:01:17 2010 -0500 summary: merge tip -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
[sqlalchemy] Re: something wrong with relationship caching at _trunk_
The same from dpaste.com: http://dpaste.com/289387/ It works with revision 6944: % pwd /home/eps/devel/src/sqlalchemy.6944 % python2.6 setup.py develop running develop ... Finished processing dependencies for SQLAlchemy==0.6.6dev % hg log|head -n1 changeset: 6944:b29164cca942 % python2.6 sacache.py 1. sector119 groups: G1 2. sector119 groups: G1 1. sector120 groups: G2 2. sector120 groups: G2 Now I would try to move from 6944 to 7195 (current) changeset by changeset and see where it would be broken. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
[sqlalchemy] Re: something wrong with relationship caching at _trunk_
% python2.6 sacache.py 1. sector119 groups: G1 2. sector119 groups: G1 1. sector120 groups: G1 2. sector120 groups: G1 -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
[sqlalchemy] Re: something wrong with relationship caching at _trunk_
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:passw...@127.0.0.1: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 sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
Re: [sqlalchemy] Re: something wrong with relationship caching at _trunk_
oh and the other thing if that's too much, step through SQLAlchemy versions and figure out the changeset that breaks your app. When I do that task, I do it as a binary search, i.e. first try a version in the middle between the "good" and the "bad", then cut each time till you get to the particular changeset. On Dec 21, 2010, at 9:49 AM, sector119 wrote: > Yep, it's should be: "def print_groups(u)" > > Michael, do you need complete (with data) working (or working wrong:) > sample? > > That code is working... But with existing data... > > On 21 Грд, 16:39, Michael Bayer wrote: >> I couldn't begin to know what the issue is with code fragments like this. >> Though your "print_groups()" function here is wrong: >> >> def print_groups(user): >>for g in u.groups: >>print g.name >> >> On Dec 21, 2010, at 9:15 AM, sector119 wrote: >> >> >> >> >> >> >> >>> Hello! >> >>> I have a problem with my relationship caching with 0.7b1 (current >>> trunk) >> >>> When I perform query on `User` model with `username` param, than >>> access some lazy and cached separaterly from main query relationship - >>> `groups`. >>> After that I exec the same query on `User` model with another >>> `username` param and access `groups` relationship I got the same >>> groups as with first query and no sql being executed to get those >>> groups... >> >>> The same code works correctly with 0.6.5. >> >>> To reproduce: >> >>> % sudo invoke-rc.d memcached restart >>> [sudo] password for sector119: >>> Restarting memcached: memcached. >>> % >> >>> # sacache.py >> >>> from sqlalchemy import create_engine >> >>> from eps.model import init_model >>> from eps.model import meta >>> from eps.model import caching_query as cache >>> from eps.model import cache_user_relationships >>> from eps.model import User >>> from eps.model import SYSTEM_SCHEMA >> >>> def get_user(username): >>>user = meta.Session.query(User).\ >>>options(cache_user_relationships).\ >>>options(cache.FromCache('default', >>> 'by_username')).\ >>>filter_by(username=username, >>> disabled=False).first() >> >>>meta.Session.connection().execute('SET search_path TO {0}, >>> {1}'.format(SYSTEM_SCHEMA, >> >>> user.locality.schema)) >> >>>return user >> >>> def print_groups(user): >>>for g in u.groups: >>>print g.name >> >>> engine = create_engine('postgresql+psycopg2:// >>> eps:mypassw...@127.0.0.1:5432/eps', echo=True) >>> init_model(engine) >> >>> 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('privat') >>> print '1. %s groups:' % u.username >>> print_groups(u) >>> print '2. %s groups:' % u.username >>> print_groups(u) >> >>> Output: >> >>> 1. sector119 groups: >>> wheel >>> 2. sector119 groups: >>> wheel >> >>> 1. privat groups: >>> wheel >>> 2. privat groups: >>> wheel >> >>> Echoing SQL: >> >>> 2010-12-21 15:50:38,273 INFO sqlalchemy.engine.base.Engine select >>> version() >>> 2010-12-21 15:50:38,274 INFO sqlalchemy.engine.base.Engine {} >>> 2010-12-21 15:50:38,275 INFO sqlalchemy.engine.base.Engine select >>> current_schema() >>> 2010-12-21 15:50:38,275 INFO sqlalchemy.engine.base.Engine {} >>> 2010-12-21 15:50:38,276 INFO sqlalchemy.engine.base.Engine BEGIN >>> (implicit) >> >>> # FIRST user >> >>> 2010-12-21 15:50:38,277 INFO sqlalchemy.engine.base.Engine SELECT >>> system.users.id AS system_users_id, system. users.username AS >>> system_users_username, system.users.password AS system_users_password, >>> system.users.first_name AS system_users_first_name, >>> system.users.last_name AS system_users_last_name, system.users. >>> middle_name AS system_users_middle_name, system.users.locality_id AS >>> system_users_locality_id, system.users. office_id AS >>> system_users_office_id, system.users.email AS system_users_email, >>> system.users.create_date ASsystem_users_create_date, >>> system.users.last_login AS system_users_last_login, >>> system.users.expire AS system_users_expire, >>> system.users.disabled AS system_users_disabled >>> FROM system.users >>> WHERE system.users.username = %(username_1)s AND system.users.disabled >>> = %(disabled_1)s >>> LIMIT %(param_1)s OFFSET %(param_2)s >>> 2010-12-21 15:50:38,277 INFO sqlalchemy.engine.base.Engine {'param_1': >>> 1, 'disabled_1': False, 'username_1': 'sector119', 'param_2': 0} >> >>> 2010-12-21 15:50:38,283 INFO sqlalchemy.engine.base.Engine SELECT >>> system.localities.id AS system_localities_id, >>> system.localities.name AS system_localities_name, >>> system.localities.type AS system_localities_type, >>> system.localities.schema AS system_localities_schema >>> FROM system.localities >>> WHERE system.localities.id = %(param_1)s >>> 2010-12-21 15:50:38,283 INFO sqlalchemy.engine.base.Engine {'param_1': >>> 1} >> >>> 20
Re: [sqlalchemy] Re: something wrong with relationship caching at _trunk_
if you could narrow it down, that would be the helpful thing here. just two model classes, three rows of test data, two queries, one file, plain memory caching like the examples/ version. On Dec 21, 2010, at 9:49 AM, sector119 wrote: > Yep, it's should be: "def print_groups(u)" > > Michael, do you need complete (with data) working (or working wrong:) > sample? > > That code is working... But with existing data... > > On 21 Грд, 16:39, Michael Bayer wrote: >> I couldn't begin to know what the issue is with code fragments like this. >> Though your "print_groups()" function here is wrong: >> >> def print_groups(user): >>for g in u.groups: >>print g.name >> >> On Dec 21, 2010, at 9:15 AM, sector119 wrote: >> >> >> >> >> >> >> >>> Hello! >> >>> I have a problem with my relationship caching with 0.7b1 (current >>> trunk) >> >>> When I perform query on `User` model with `username` param, than >>> access some lazy and cached separaterly from main query relationship - >>> `groups`. >>> After that I exec the same query on `User` model with another >>> `username` param and access `groups` relationship I got the same >>> groups as with first query and no sql being executed to get those >>> groups... >> >>> The same code works correctly with 0.6.5. >> >>> To reproduce: >> >>> % sudo invoke-rc.d memcached restart >>> [sudo] password for sector119: >>> Restarting memcached: memcached. >>> % >> >>> # sacache.py >> >>> from sqlalchemy import create_engine >> >>> from eps.model import init_model >>> from eps.model import meta >>> from eps.model import caching_query as cache >>> from eps.model import cache_user_relationships >>> from eps.model import User >>> from eps.model import SYSTEM_SCHEMA >> >>> def get_user(username): >>>user = meta.Session.query(User).\ >>>options(cache_user_relationships).\ >>>options(cache.FromCache('default', >>> 'by_username')).\ >>>filter_by(username=username, >>> disabled=False).first() >> >>>meta.Session.connection().execute('SET search_path TO {0}, >>> {1}'.format(SYSTEM_SCHEMA, >> >>> user.locality.schema)) >> >>>return user >> >>> def print_groups(user): >>>for g in u.groups: >>>print g.name >> >>> engine = create_engine('postgresql+psycopg2:// >>> eps:mypassw...@127.0.0.1:5432/eps', echo=True) >>> init_model(engine) >> >>> 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('privat') >>> print '1. %s groups:' % u.username >>> print_groups(u) >>> print '2. %s groups:' % u.username >>> print_groups(u) >> >>> Output: >> >>> 1. sector119 groups: >>> wheel >>> 2. sector119 groups: >>> wheel >> >>> 1. privat groups: >>> wheel >>> 2. privat groups: >>> wheel >> >>> Echoing SQL: >> >>> 2010-12-21 15:50:38,273 INFO sqlalchemy.engine.base.Engine select >>> version() >>> 2010-12-21 15:50:38,274 INFO sqlalchemy.engine.base.Engine {} >>> 2010-12-21 15:50:38,275 INFO sqlalchemy.engine.base.Engine select >>> current_schema() >>> 2010-12-21 15:50:38,275 INFO sqlalchemy.engine.base.Engine {} >>> 2010-12-21 15:50:38,276 INFO sqlalchemy.engine.base.Engine BEGIN >>> (implicit) >> >>> # FIRST user >> >>> 2010-12-21 15:50:38,277 INFO sqlalchemy.engine.base.Engine SELECT >>> system.users.id AS system_users_id, system. users.username AS >>> system_users_username, system.users.password AS system_users_password, >>> system.users.first_name AS system_users_first_name, >>> system.users.last_name AS system_users_last_name, system.users. >>> middle_name AS system_users_middle_name, system.users.locality_id AS >>> system_users_locality_id, system.users. office_id AS >>> system_users_office_id, system.users.email AS system_users_email, >>> system.users.create_date ASsystem_users_create_date, >>> system.users.last_login AS system_users_last_login, >>> system.users.expire AS system_users_expire, >>> system.users.disabled AS system_users_disabled >>> FROM system.users >>> WHERE system.users.username = %(username_1)s AND system.users.disabled >>> = %(disabled_1)s >>> LIMIT %(param_1)s OFFSET %(param_2)s >>> 2010-12-21 15:50:38,277 INFO sqlalchemy.engine.base.Engine {'param_1': >>> 1, 'disabled_1': False, 'username_1': 'sector119', 'param_2': 0} >> >>> 2010-12-21 15:50:38,283 INFO sqlalchemy.engine.base.Engine SELECT >>> system.localities.id AS system_localities_id, >>> system.localities.name AS system_localities_name, >>> system.localities.type AS system_localities_type, >>> system.localities.schema AS system_localities_schema >>> FROM system.localities >>> WHERE system.localities.id = %(param_1)s >>> 2010-12-21 15:50:38,283 INFO sqlalchemy.engine.base.Engine {'param_1': >>> 1} >> >>> 2010-12-21 15:50:38,285 INFO sqlalchemy.engine.base.Engine SET >>> search_path TO system,ternopil >>> 2010-12-21 15:50:38,285
[sqlalchemy] Re: something wrong with relationship caching at _trunk_
Yep, it's should be: "def print_groups(u)" Michael, do you need complete (with data) working (or working wrong:) sample? That code is working... But with existing data... On 21 Грд, 16:39, Michael Bayer wrote: > I couldn't begin to know what the issue is with code fragments like this. > Though your "print_groups()" function here is wrong: > > def print_groups(user): > for g in u.groups: > print g.name > > On Dec 21, 2010, at 9:15 AM, sector119 wrote: > > > > > > > > > Hello! > > > I have a problem with my relationship caching with 0.7b1 (current > > trunk) > > > When I perform query on `User` model with `username` param, than > > access some lazy and cached separaterly from main query relationship - > > `groups`. > > After that I exec the same query on `User` model with another > > `username` param and access `groups` relationship I got the same > > groups as with first query and no sql being executed to get those > > groups... > > > The same code works correctly with 0.6.5. > > > To reproduce: > > > % sudo invoke-rc.d memcached restart > > [sudo] password for sector119: > > Restarting memcached: memcached. > > % > > > # sacache.py > > > from sqlalchemy import create_engine > > > from eps.model import init_model > > from eps.model import meta > > from eps.model import caching_query as cache > > from eps.model import cache_user_relationships > > from eps.model import User > > from eps.model import SYSTEM_SCHEMA > > > def get_user(username): > > user = meta.Session.query(User).\ > > options(cache_user_relationships).\ > > options(cache.FromCache('default', > > 'by_username')).\ > > filter_by(username=username, > > disabled=False).first() > > > meta.Session.connection().execute('SET search_path TO {0}, > > {1}'.format(SYSTEM_SCHEMA, > > > user.locality.schema)) > > > return user > > > def print_groups(user): > > for g in u.groups: > > print g.name > > > engine = create_engine('postgresql+psycopg2:// > > eps:mypassw...@127.0.0.1:5432/eps', echo=True) > > init_model(engine) > > > 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('privat') > > print '1. %s groups:' % u.username > > print_groups(u) > > print '2. %s groups:' % u.username > > print_groups(u) > > > Output: > > > 1. sector119 groups: > > wheel > > 2. sector119 groups: > > wheel > > > 1. privat groups: > > wheel > > 2. privat groups: > > wheel > > > Echoing SQL: > > > 2010-12-21 15:50:38,273 INFO sqlalchemy.engine.base.Engine select > > version() > > 2010-12-21 15:50:38,274 INFO sqlalchemy.engine.base.Engine {} > > 2010-12-21 15:50:38,275 INFO sqlalchemy.engine.base.Engine select > > current_schema() > > 2010-12-21 15:50:38,275 INFO sqlalchemy.engine.base.Engine {} > > 2010-12-21 15:50:38,276 INFO sqlalchemy.engine.base.Engine BEGIN > > (implicit) > > > # FIRST user > > > 2010-12-21 15:50:38,277 INFO sqlalchemy.engine.base.Engine SELECT > > system.users.id AS system_users_id, system. users.username AS > > system_users_username, system.users.password AS system_users_password, > > system.users. first_name AS system_users_first_name, > > system.users.last_name AS system_users_last_name, system.users. > > middle_name AS system_users_middle_name, system.users.locality_id AS > > system_users_locality_id, system.users. office_id AS > > system_users_office_id, system.users.email AS system_users_email, > > system.users.create_date AS system_users_create_date, > > system.users.last_login AS system_users_last_login, > > system.users.expire AS system_users_expire, > > system.users.disabled AS system_users_disabled > > FROM system.users > > WHERE system.users.username = %(username_1)s AND system.users.disabled > > = %(disabled_1)s > > LIMIT %(param_1)s OFFSET %(param_2)s > > 2010-12-21 15:50:38,277 INFO sqlalchemy.engine.base.Engine {'param_1': > > 1, 'disabled_1': False, 'username_1': 'sector119', 'param_2': 0} > > > 2010-12-21 15:50:38,283 INFO sqlalchemy.engine.base.Engine SELECT > > system.localities.id AS system_localities_id, > > system.localities.name AS system_localities_name, > > system.localities.type AS system_localities_type, > > system.localities.schema AS system_localities_schema > > FROM system.localities > > WHERE system.localities.id = %(param_1)s > > 2010-12-21 15:50:38,283 INFO sqlalchemy.engine.base.Engine {'param_1': > > 1} > > > 2010-12-21 15:50:38,285 INFO sqlalchemy.engine.base.Engine SET > > search_path TO system,ternopil > > 2010-12-21 15:50:38,285 INFO sqlalchemy.engine.base.Engine {} > > > # FIRST user GROUPS > > > 2010-12-21 15:50:38,286 INFO sqlalchemy.engine.base.Engine SELECT > > system.groups.id AS system_groups_id, system.groups.name AS > > system_groups_name > > FROM system.groups, system.users_groups > > WHERE %(param_1)s = system.users_groups.user_id AND sy