On 11/02/2015 09:16 AM, Mattias Lagergren wrote:
> Hi,
>
> I'm trying to use load_only and joinedload on a relationship
> model.Asset.parent. The parent relation is polymorphic and can be either
> Task or Project with the common Base class called Context.
>
> |
> importsqlalchemy.orm
> importsqlalchemy.inspection
>
> entity =model.session.query(
> model.Asset
> ).options(
> sqlalchemy.orm.joinedload('parent').load_only(
> 'context_type','name','link'
> )
> ).first()
>
> state =sqlalchemy.inspection.inspect(entity.parent)
> forattribute instate.attrs:
> is_loaded =(
> attribute.loaded_value isnot
> sqlalchemy.orm.base.NO_VALUE
> )
> ifis_loaded:
> printattribute.key
>
> # Output:
> id
> taskid
> name
> context_type
>
> |
>
> The id, name and context_type is from Context. And taskid is primary key
> on the taskid and is a foreignkey to the context.id. As you can see
> "name" loads fine but "link" attribute is not loaded. The "link" column
> is added as a column_property to Context using a __declare_last__.
does "link" load if you *dont* specify load_only? does it *ever* load?
What's a LinkTypeDecorator and what's "query"? seems like you're doing
something odd there. Can't do anything without fully working code (see
http://stackoverflow.com/help/mcve).
>
> These are simplified versions of the classes:
>
> |
>
> classContext(Base):
> '''Represent a context.'''
> context_type =Column(Unicode(32),nullable=False)
>
> __mapper_args__ ={
> 'polymorphic_on':context_type,
> 'polymorphic_identity':'context'
> }
>
> name =Column(Unicode(255),default=u'',nullable=False)
>
> @declared_attr
> defid(cls):
> returnColumn(CHAR(36),primary_key=True,default=lambda:str(uuid()))
>
> @classmethod
> def__declare_last__(cls):
> '''Return link expression query.'''
>
> ...
>
> cls.link =column_property(
> sqlalchemy.type_coerce(
> query,LinkTypeDecorator
> ).label('link')
> )
>
> classTask(Context):
> '''Represent a task.'''
>
> taskid =Column(
> types.CHAR(36),
> ForeignKey('context.id'),
> primary_key=True
> )
>
> __mapper_args__ ={
> 'polymorphic_identity':'task'
> }
>
>
> classAsset(Base):
> '''Represent an Asset.'''
>
> context_id =sqlalchemy.Column(
> sqlalchemy.CHAR(36),sqlalchemy.ForeignKey('context.id')
> )
>
> parent =relationship('Context',backref=backref('assets'))
>
> |
>
> Can you see if I'm doing something wrong?
>
> --
> You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.