[sqlalchemy] Re: something wrong with relationship caching at _trunk_

2010-12-22 Thread sector119
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_

2010-12-22 Thread Michael Bayer
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_

2010-12-22 Thread sector119
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_

2010-12-22 Thread sector119
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_

2010-12-22 Thread sector119
% 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_

2010-12-22 Thread sector119
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_

2010-12-21 Thread Michael Bayer
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_

2010-12-21 Thread Michael Bayer
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_

2010-12-21 Thread sector119
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