On 01/06/2016 04:35 PM, Christopher Lee wrote:
> 
> My code tests to see if an column on a model is loaded, in part because
> I merge partial models to perform a sparse update on the database.  I do
> that by checking the __dict__ of the model, though sqlalchemy.inspect
> also works.
> 
> Using SQLAlchemy 0.8.0:
> 
> 
> import sqlalchemy as sa
> import sqlalchemy.ext.declarative
> Base = sa.ext.declarative.declarative_base()
> 
> class Foo(Base):
>     __tablename__ = 'foos'
>     x = sa.Column(sa.String(36), primary_key=True)
> 
> foo = Foo()
> 
> # Test unloaded attribute
>>>> 'x' in foo.__dict__
> False
>>>> sa.inspect(foo).unloaded
> set(['x'])
> 
> # Access attribute
>>>> foo.x
> 
> # Test loaded attribute
>>>> 'x' in foo.__dict__
> True
>>>> sa.inspect(foo).unloaded
> set([])
> 
> However, in sqlalchemy 1.0.10, that is no longer the case.  The
> attribute is still marked as unloaded, and does not appear in the
> __dict__.  Is that intentional, or is it a regression? 

that is intentional, details on this change are here:

http://docs.sqlalchemy.org/en/rel_1_0/changelog/migration_10.html#changes-to-attribute-events-and-other-operations-regarding-attributes-that-have-no-pre-existing-value

the case directly below it illustrates why this consistency is important:

http://docs.sqlalchemy.org/en/rel_1_0/changelog/migration_10.html#priority-of-attribute-changes-on-relationship-bound-attributes-vs-fk-bound-may-appear-to-change

If I were writing SQLAlchemy today, I'd probably have done away with
this behavior entirely and it would be emitting AttributeError just like
regular Python.



 Setting the
> attribute marks it as loaded, as expected.  
I haven't narrowed down the
> issue to a specific version, because I wasn't sure if it is intentional.
>  (i.e., maybe attributes are only marked as loaded if they are a
> relationship)?
> 
> -- 
> 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 sqlalchemy+unsubscr...@googlegroups.com
> <mailto:sqlalchemy+unsubscr...@googlegroups.com>.
> To post to this group, send email to sqlalchemy@googlegroups.com
> <mailto:sqlalchemy@googlegroups.com>.
> Visit this group at https://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 sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to