Thanks Michael for the response.

A few things:
>
> 1. the Python dict class cannot be mapped.  Classes can only extend from
> "object" or other classes that in turn extend from "object".
>


> 2. SQLAlchemy instrumentation relies upon Python descriptors (see
> http://docs.python.org/howto/descriptor.html) to intercept changes in
> state on an object, that is, setting and getting attributes.   So
> techniques which involve direct access to self.__dict__ will fail to work
> correctly with a mapped class.
>
> 3. The mapping of a class is considered to be an integral part of that
> class' definition.   It's not a valid use case to map classes at some
> arbitrary point in time after many objects of that class have been created.
>  It's for this reason that modern SQLAlchemy strongly recommends the use of
> the Declarative pattern introduced at
> http://docs.sqlalchemy.org/en/latest/orm/tutorial.html as the primary
> means of mapping classes to database tables; it eliminates the confusion
> that the mapping and the class itself can be generally treated as two
> independent things.  While classes can be mapped and unmapped, this is not
> a regular operation and isn't appropriate except in special testing
> circumstances.
>
>
In this try I used mapping and not declarative style in order to separate
pre-existent classes (with some attributes that come from an XML
definition, and some other attributes not that I must persist) and
attributes that must be persisted but maybe I was trying to use SQLAlchemy
in the bad way. Probably is better to make a class A that inherits from
Base with only attributes persisted and my class B that inherits from A
with other attributes and methods, in a sort of mixin like this:
http://pastebin.com/iqaYMz59
Is this the right approach?

I have another question maybe a little out of topic.
How can I map the attribute "toPersistAttrComplex" of last pastebin example?

Tnx,
Andrea


> On Feb 22, 2012, at 6:20 AM, Andrea wrote:
>
> > Hi all,
> > I have some object on a pre-existing model. Now we want to add a
> > persistance layer and so SQLAlchemy/SQLite will be our choice.
> > When I add an object to session a UnmappedInstanceError is raised:
> > Class 'try_sqlalchemy.example2.applib_model.DescriptorBean'
> > is mapped, but this instance lacks instrumentation.  This occurs when
> > the instance
> > is created before
> >
> sqlalchemy.orm.mapper(try_sqlalchemy.example2.applib_model.DescriptorBean)
> > was called.
> >
> > This is the example, three code snippets from three python modules:
> > http://pastebin.com/KLFFN3ke
> >
> > On debug I see that the DescriptorBean instance is created after the
> > mapping (mapping is created on startup.createSchema method) so I don't
> > understand the error message.
> > The same problems if I use declarative and inherit from Base (class
> > DescriptorBean(Base, _Struct)). No problems if I have a class that
> > inherits directly from object. Maybe is _Struct inheritance that
> > destroys mapper instrumentation? Any suggestion?
> >
> > Thanks,
> > Andrea
> >
> > --
> > You received this message because you are subscribed to the Google
> Groups "sqlalchemy" group.
> > To post to this group, send email to sqlalchemy@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 sqlalchemy@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 sqlalchemy@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.

Reply via email to