Moshe C. wrote: > > Thanks. > Given that I am not going to upgrade very soon, is it right to > conclude that there was a bug in 0.4.6, or is my usage wrong?
it is not a bug. save() is used only for transient instances. > > > On Jun 3, 5:28 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: >> Moshe C. wrote: >> >> > Trying to find out if I hit a bug or it is me doing something wrong. >> > Using version 0.4.6 >> >> > when creating an object and then calling session.save() I get: >> > Instance 'res...@-0x486e4074' is already persistent >> >> > It works save_or_update() with, but I don't see why I should use that. >> >> > I did read that using session.mapper can cause this but I use >> > orm.mapper. >> >> session.save() is only used to persist transient instances. It is >> deprecated (as is update() and save_or_update()) and not present in >> version 0.5. Upgrade to at least 0.4.8 if not 0.5 and use >> session.add() >> (equivalent to save_or_update()), which eliminates the need for the user >> to distinguish between transient and detached instances. For a >> description of what the heck im talking about when i say "transient" and >> "detached" >> seehttp://www.sqlalchemy.org/docs/05/session.html#quickie-intro-to-objec... >> . >> >> >> >> > Here is the mapping code: >> >> > 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) > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---