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.