seems to work in SVN trunk, have you tried there ?

On Dec 14, 2007, at 3:27 AM, David J. Mellor wrote:

> from sqlalchemy import *
> from sqlalchemy.orm import *
> from sqlalchemy.orm.interfaces import MapperExtension
>
> class Parent(object):
>    pass
>
> class Child(object):
>    pass
>
> meta = ThreadLocalMetaData()
> Session = sessionmaker(autoflush=True, transactional=True)
> session = None
>
> class ThreadLocalSession(MapperExtension):
>    def get_session(self):
>        return session
>
> parents_table = Table(
>    "parents", meta,
>    Column("id", Integer, Sequence("parents_id_seq"),  
> primary_key=True),
>    Column("name", String(255), nullable=False))
>
> mapper(Parent, parents_table)
>
> children_table = Table(
>    "children", meta,
>    Column("id", Integer, Sequence("children_id_seq"),  
> primary_key=True),
>    Column("name", String(255), nullable=False),
>    Column("parent_id", Integer, ForeignKey("parents.id"),  
> nullable=False))
>
> # The mapper extension is necessary, otherwise the dynamic query  
> returned by
> # Parent.children will not be associated with a session.
> mapper(Child, children_table,
>       properties=dict(
>           parent=relation(Parent, backref=backref("children",
>                                                   lazy="dynamic"))),
>       extension=ThreadLocalSession())
>
> engine = create_engine("sqlite:///:memory:", echo=False)
> meta.bind = engine
> session = Session(bind=engine)
> parents_table.create()
> for name in ["parent1", "parent2"]:
>    parent = Parent()
>    parent.name = name
>    session.save(parent)
>
> session.flush()
>
> firstParent = session.query(Parent).get(1)
> secondParent = session.query(Parent).get(2)
> children_table.create()
> for name in ["child1", "child2", "child3", "child4"]:
>    child = Child()
>    child.name = name
>    if name == "child1":
>        child.parent = firstParent
>    else:
>        child.parent = secondParent
>
>    session.save(child)
>
> session.flush()
> session.commit()
> session.clear()
>
> first_parent = session.query(Parent).get(1)
> second_parent = session.query(Parent).get(2)
> num_first_children = first_parent.children.count()
> num_second_children = second_parent.children.count()
> assert num_first_children == 1 and num_second_children == 3, \
> "Children in first parent = %s, in second parent = %s" % \
> (num_first_children, num_second_children)


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to