diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-07-27 19:12:40 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-07-27 19:12:40 -0400 |
commit | 937c098d5a9b11f2707fc7bf57408cd98dae5c4e (patch) | |
tree | b13b33aefc56570c9989e220a89fdbe3313e7e6a | |
parent | effad0a4e33d40940ca669f4f88c7cb9961db4da (diff) | |
download | sqlalchemy-937c098d5a9b11f2707fc7bf57408cd98dae5c4e.tar.gz |
modernize this a bit
-rw-r--r-- | examples/adjacency_list/adjacency_list.py | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/examples/adjacency_list/adjacency_list.py b/examples/adjacency_list/adjacency_list.py index a0683ea0c..9e62bc0be 100644 --- a/examples/adjacency_list/adjacency_list.py +++ b/examples/adjacency_list/adjacency_list.py @@ -1,7 +1,5 @@ -from sqlalchemy import MetaData, Table, Column, Sequence, ForeignKey,\ - Integer, String, create_engine - -from sqlalchemy.orm import sessionmaker, relationship, backref,\ +from sqlalchemy import Column, ForeignKey, Integer, String, create_engine +from sqlalchemy.orm import Session, relationship, backref,\ joinedload_all from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm.collections import attribute_mapped_collection @@ -18,7 +16,7 @@ class TreeNode(Base): children = relationship("TreeNode", # cascade deletions - cascade="all", + cascade="all, delete-orphan", # many to one + adjacency list - remote_side # is required to reference the 'remote' @@ -42,11 +40,10 @@ class TreeNode(Base): ) def dump(self, _indent=0): - return " " * _indent + repr(self) + \ "\n" + \ "".join([ - c.dump(_indent +1) + c.dump(_indent + 1) for c in self.children.values()] ) @@ -63,10 +60,7 @@ if __name__ == '__main__': Base.metadata.create_all(engine) - # session. using expire_on_commit=False - # so that the session's contents are not expired - # after each transaction commit. - session = sessionmaker(engine, expire_on_commit=False)() + session = Session(engine) node = TreeNode('rootnode') TreeNode('node1', parent=node) @@ -91,16 +85,13 @@ if __name__ == '__main__': TreeNode('subnode4', parent=node.children['node4']) TreeNode('subsubnode1', parent=node.children['node4'].children['subnode3']) - # mark node1 as deleted and remove - session.delete(node.children['node1']) + # remove node1 from the parent, which will trigger a delete + # via the delete-orphan cascade. + del node.children['node1'] msg("Removed node1. flush + commit:") session.commit() - # expire the "children" collection so that - # it reflects the deletion of "node1". - session.expire(node, ['children']) - msg("Tree after save:\n %s", node.dump()) msg("Emptying out the session entirely, " @@ -109,12 +100,12 @@ if __name__ == '__main__': node = session.query(TreeNode).\ options(joinedload_all("children", "children", "children", "children")).\ - filter(TreeNode.name=="rootnode").\ + filter(TreeNode.name == "rootnode").\ first() msg("Full Tree:\n%s", node.dump()) - msg( "Marking root node as deleted, flush + commit:" ) + msg("Marking root node as deleted, flush + commit:") session.delete(node) session.commit() |