On Apr 24, 2012, at 1:16 PM, David Bowser wrote:

> I have a mixin as follows designed to remove a bunch of copy paste 
> relationship code.
> 
> class UserMixin(object):
>    @_declared_attr
>    def user_id(cls):
>        return 
> sa.Column('user_id',typ.Integer,sa.ForeignKey("tg_user.user_id", 
> ondelete="CASCADE"),nullable=False)
> 
>    @_declared_attr
>    def user(cls):
>        return orm.relationship("User",primaryjoin='%s.user_id == 
> User.user_id'%cls.__name__)
> 
>    @_declared_attr
>    def user_profile(cls):
>        return orm.relationship('UserProfile',primaryjoin="%s.user_id == 
> UserProfile.id"%cls.__name__,
>                foreign_keys=lambda:[metadata.tables['user_profiles'].c.id],
>                backref=cls.__tablename__ if cls.__tablename__ else 
> tablename(cls.__name__))
> 
> when I use my mixin in say a class like this:
> 
> class JournalEntry(UserMixin,DeclarativeBase):
>       __tablename__ = 'journal_entries'
>       #{ Columns
>        id = Column(Integer,primary_key=True)
>       is_private = Column(Boolean,default=False)
>       modified = Column(DateTime,onupdate=datetime.datetime.now)
>       text = Column(UnicodeText)
>       #}
> 
> And then I:
> 
>>>> from myProject.model import *
>>>> profile = DBSession.query(UserProfile).get(1)
>>>> profile.journal_entries
> 
> I keep getting the error:
> 
> /Users/Me/Documents/Work/Projects/myProject/myProject/lib/python2.7/site-packages/SQLAlchemy-0.7.6-py2.7-macosx-10.7-intel.egg/sqlalchemy/orm/strategies.py:508:
>  SAWarning: Multiple rows returned with uselist=False for lazily-loaded 
> attribute 'UserProfile.journal_entries' 
> < myProject.model.user_data.JournalEntry object at 0x10d8b26d0>
> 
> I can't figure out why it's using uselist=False, and a joined lazy load. Any 
> help pointing me in the right direction would be great.

it's probably that foreign_keys in your relationship there, which appears to 
refer to user_profiles.c.id.   that's the column which is referred to here, and 
that parameter would instead be referring to the "user_id" column, i.e. the one 
that has the foreign key back to the parent row.   It's equivalent to the 
column that would have ForeignKey set up on it here; I guess you have some 
multiple foreign keys happening here?    tg_user.user_id is not the same as 
UserProfile.id ?   This suggests some potential design problems, what is the 
value of JournalEntries.user_id if it points to row "3" in tg_user.user_id and 
row "5" in user_profile.id ?


-- 
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