yep... here's the error: sqlalchemy.orm.exc.FlushError: Attempting to flush an item of type <class '__main__.Thinker'> as a member of collection "Address.user". Expected an object of type <class '__main__.User'> or a polymorphic subclass of this type. If <class '__main__.Thinker'> is a subclass of <class '__main__.User'>, configure mapper "Mapper|User|users" to load this subtype polymorphically, or set enable_typechecks=False to allow any subtype to be accepted for flush.
enable_typechecks=False disables this check: user = relationship("User", enable_typechecks=False, backref=backref('addresses', order_by=id)) it just means that later on, when you hit some_address.user, you may get a User back, not a Thinker (or you will, if it hasn't been expired. you can't rely on it being consistent). If that's OK, then set the flag - it just wants to check that this is what you intend. On May 30, 2014, at 1:51 PM, Victor Olex <victor.o...@vtenterprise.com> wrote: > Hello all, long time no see... > > Is it OK to create classes, which inherit from mapped classes, but are not > meant to be persited and how to do it as to avoid FlushError on related > classes? > > from sqlalchemy import * > from sqlalchemy.ext.declarative import declarative_base > from sqlalchemy.orm import Session, relationship, backref > > Base = declarative_base() > > class User(Base): > __tablename__ = 'users' > id = Column(Integer, Sequence('user_id_seq'), primary_key=True) > name = Column(String(50)) > fullname = Column(String(50)) > password = Column(String(12)) > > class Address(Base): > __tablename__ = 'addresses' > id = Column(Integer, primary_key=True) > email_address = Column(String, nullable=False) > user_id = Column(Integer, ForeignKey('users.id')) > user = relationship("User", backref=backref('addresses', order_by=id)) > > class Thinker(User): > thought = 'Thoughts are not to be persited' > > > e = create_engine('sqlite:///', echo=True) > Base.metadata.bind = e > Base.metadata.create_all() > > t = Thinker(name='Descartes') > s = Session(bind=e) > s.add(t) > s.commit() # no problem > a = Address(user=t, email='decar...@gmail.com') > a = Address(user=t, email_address='decar...@gmail.com') > s.commit() # FlushError > > Thanks, > > V. > > > -- > 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 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 sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.