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
-~----------~----~----~----~------~----~------~--~---

Reply via email to