engine = sqllite.engine(':memory:', {})
users = Table('users', engine,
- Column('user_id', INTEGER, primary_key = True),
- Column('user_name', VARCHAR(16), nullable = False),
- Column('email_address', VARCHAR(60), key='email'),
- Column('password', VARCHAR(20), nullable = False)
+ Column('user_id', Integer, primary_key = True),
+ Column('user_name', String(16), nullable = False),
+ Column('email_address', String(60), key='email'),
+ Column('password', String(20), nullable = False)
)
user_prefs = Table('user_prefs', engine,
- Column('pref_id', INTEGER, primary_key = True),
- Column('user_id', INTEGER, nullable = False, foreign_key = ForeignKey(users.c.user_id))
- Column('pref_name', VARCHAR(40), nullable = False),
- Column('pref_value', VARCHAR(100))
+ Column('pref_id', Integer, primary_key = True),
+ Column('user_id', Integer, nullable = False, foreign_key = ForeignKey(users.c.user_id))
+ Column('pref_name', String(40), nullable = False),
+ Column('pref_value', String(100))
)
</&>
<p>This works because when the Table constructor is called for a particular name and database engine, if the table has already been created then the instance returned will be the same as the original. This is a <b>singleton</b> constructor:</p>
<&|formatting.myt:code&>
>>> news_articles = Table('news', engine,
- ... Column('article_id', INTEGER, primary_key = True),
- ... Column('url', VARCHAR(250), nullable = False)
+ ... Column('article_id', Integer, primary_key = True),
+ ... Column('url', String(250), nullable = False)
... )
>>> othertable = Table('news', engine)
>>> othertable is news_articles
name=tables.trees.c.node_name,
parent_id=tables.trees.c.parent_node_id,
root_id=tables.trees.c.root_node_id,
- children=relation(TreeNode, primaryjoin=tables.trees.c.parent_node_id==tables.trees.c.node_id, foreignkey=tables.trees.c.parent_node_id, thiscol=tables.trees.c.node_id, lazy=True, uselist=True, private=True),
+ children=relation(TreeNode, primaryjoin=tables.trees.c.parent_node_id==tables.trees.c.node_id, lazy=True, uselist=True, private=True),
))
node2 = TreeNode('node2')
self.root = self
self.parent = None
self.id = None
+ self.data =None
self.parent_id = None
self.root_id=None
def _set_root(self, root):
def __str__(self):
return self._getstring(0, False)
def _getstring(self, level, expand = False):
- s = (' ' * level) + "%s (%s,%s,%s, %d)" % (self.name, self.id,self.parent_id,self.root_id, id(self)) + '\n'
+ s = (' ' * level) + "%s (%s,%s,%s, %d): %s" % (self.name, self.id,self.parent_id,self.root_id, id(self), repr(self.data)) + '\n'
if expand:
s += string.join([n._getstring(level+1, True) for n in self.children.values()], '')
return s
self.value = value
def __repr__(self):
return "TreeData(%s, %s)" % (repr(self.id), repr(self.value))
-# define the mapper. we will make "convenient" property
-# names vs. the more verbose names in the table definition
TreeNode.mapper=assignmapper(tables.trees, properties=dict(
id=tables.trees.c.node_id,
name=tables.trees.c.node_name,
parent_id=tables.trees.c.parent_node_id,
root_id=tables.trees.c.root_node_id,
- root=relation(TreeNode, primaryjoin=tables.trees.c.root_node_id==tables.trees.c.node_id, foreignkey=tables.trees.c.node_id, thiscol=tables.trees.c.root_node_id, lazy=None, uselist=False),
- children=relation(TreeNode, primaryjoin=tables.trees.c.parent_node_id==tables.trees.c.node_id, foreignkey=tables.trees.c.parent_node_id, thiscol=tables.trees.c.node_id, lazy=None, uselist=True, private=True),
+ root=relation(TreeNode, primaryjoin=tables.trees.c.root_node_id==tables.trees.c.node_id, foreignkey=tables.trees.c.node_id, lazy=None, uselist=False),
+ children=relation(TreeNode, primaryjoin=tables.trees.c.parent_node_id==tables.trees.c.node_id, lazy=None, uselist=True, private=True),
data=relation(TreeData, tables.treedata, properties=dict(id=tables.treedata.c.data_id), private=True, lazy=False)
), extension = TreeLoader())
self.key = key
self.parent = parent
- if self.parent.table is self.target and self.foreignkey is None:
- raise "Circular relationship requires explicit 'foreignkey' parameter"
+# if self.parent.table is self.target and self.foreignkey is None:
+ # raise "Circular relationship requires explicit 'foreignkey' parameter"
# if join conditions were not specified, figure them out based on foreign keys
if self.secondary is not None:
objectstore.uow().register_attribute(parent.class_, key, uselist = self.uselist, deleteremoved = self.private)
def _get_direction(self):
-# if self.thiscol is not None:
- # if self.thiscol.primary_key:
- # return PropertyLoader.LEFT
- # else:
- # return PropertyLoader.RIGHT
if self.parent.primarytable is self.target:
if self.foreignkey.primary_key:
return PropertyLoader.RIGHT
task.mapper.register_dependencies(self)
head = self._sort_dependencies()
- print "Task dump:\n" + head.dump()
+ #print "Task dump:\n" + head.dump()
head.execute(self)
def post_exec(self):
else:
get_dependency_task(whosdep[0], processor, isdelete).append(whosdep[1], isdelete=isdelete)
- for k, v in dependencies.iteritems():
- print str(k), repr(v)
-
head = util.DependencySorter(tuples, allobjects).sort()
if head is None:
return None