full code: import sqlalchemy as sa from sqlalchemy import orm
class Model: session = None class Person(object): @staticmethod def query(): return Model.session.query(Model.Person) class PersonRelative(object): @staticmethod def query(): return Model.session.query(Model.PersonRelative) class Resume(object): @staticmethod def query(): return Model.session.query(Model.Resume) class Workplace(object): @staticmethod def query(): return Model.session.query(Model.Workplace) class ResumeWorkplace(object): @staticmethod def query(): return Model.session.query(Model.ResumeWorkplace) def __init__(self, engine): """Call me before using any of the tables or classes in the model.""" metadata = sa.MetaData() sm = orm.sessionmaker(autoflush=True, transactional=True, bind=engine) Model.session = orm.scoped_session(sm) person_table = sa.Table('person', metadata, autoload = True, autoload_with=engine) person_relative_table = sa.Table('person_relative', metadata, autoload = True, autoload_with=engine) resume_table = sa.Table('resume', metadata, autoload = True, autoload_with=engine) workplace_table = sa.Table('workplace', metadata, autoload = True, autoload_with=engine) resume_workplace_table = sa.Table('resume_workplace', metadata, autoload = True, autoload_with=engine) orm.mapper(self.Person, person_table, properties = { 'relatives' : orm.relation(self.Person, secondary=person_relative_table, primaryjoin=person_table.c.id==person_relative_table.c.person_id, secondaryjoin=person_relative_table.c.relative_id==person_table.c.id, backref='followers'), 'resumes' : orm.relation(self.Resume, backref='person') } ) orm.mapper(self.Resume, resume_table, properties = { 'workplaces' : orm.relation(self.Workplace, secondary=resume_workplace_table, backref='resumes') } ) orm.mapper(self.Workplace, workplace_table) def commit(self): Model.session.commit() def save(self, obj): Model.session.save(obj) def save_or_update(self, obj): Model.session.save_or_update(obj) def flush(self): Model.session.flush() def delete(self, obj): Model.session.delete(obj) def clear(self): Model.session.clear() On Jun 3, 11:47 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: > Moshe C. wrote: > > > Weird, the first assertion already fails, but I am not using > > ScopedSession.mapper. See the code in the first post. > > > On Jun 3, 11:28 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: > >> easy way to ensure things are working as expected: > > >> Moshe C. wrote: > > >> > In code: > > >> > t = Model.Resume() > >> > t.id = something > > >> assert t not in Model.session > > its not a full example. no imports are illustrated including what > orm.mapper() might be doing. There is obviously code which is setting up > Session.mapper() or otherwise code within Resume().__init__() doing > something similar. > > > > >> > w = Model.session.query(Model.Workplace).filter_by(id=idd).first() > > >> assert t not in Model.session > > >> > # model.save(t) > >> > model.save_or_update(t) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---