Thread: [SQLObject] how to - tree data structure?
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Juraj V. <va...@ra...> - 2005-12-27 17:49:53
|
Hi, I'm using SQLObject 0.7.0. I'm trying to store into DB tree structure with nodes like: class Node(SQLObject): name = StringCol() parent = ForeignKey('Node') I'm having problems to select nodes from DB based on parent column. See below: #Create root node: >>> rootnode = Node(name="Root", parent=None) #Create child node: >>> Node(name="child",parent=rootnode) #Everything seems OK: >>> Node._connection.debug = True >>> res = Node.select() >>> list(res) 1/Select : SELECT node.id, node.name, node.parent_id FROM node WHERE 1 = 1 [<Node 1L name='Root' parentID=None>, <Node 2L name='child' parentID=1L>] #But trying to select by parent column fails: >>> roots=Node.select(Node.parent==None) >>> list(roots) 1/Select : SELECT node.id, node.name, node.parent_id FROM node WHERE 0 [] >>> res=Node.select(Node.parent==rootnode) >>> list(res) 1/Select : SELECT node.id, node.name, node.parent_id FROM node WHERE 0 [] Juraj |
From: Oleg B. <ph...@ma...> - 2005-12-27 19:10:11
|
On Tue, Dec 27, 2005 at 06:49:41PM +0100, Juraj Variny wrote: > >>> roots=Node.select(Node.parent==None) Wrong usage. This is equivalent to roots=Node.select(False) that gives you an empty list. In SQLObject if you want to do .select(), do it like this: class MyTable(SQLObject): name = StringCol() names = MyTable.select(MyTable.q.name == "test") For joins (ForeeignKey, MultipleJoin, RelatedKoin) queries are more complex as you have to construct join yourself. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Juraj V. <va...@na...> - 2005-12-28 09:57:28
|
Hi, yes, it should be: >>> roots=Node.select(Node.q.parent==None) Thanks for reply. Juraj On Tuesday 27 December 2005 20:09, Oleg Broytmann wrote: > On Tue, Dec 27, 2005 at 06:49:41PM +0100, Juraj Variny wrote: > > >>> roots=Node.select(Node.parent==None) > > Wrong usage. This is equivalent to > roots=Node.select(False) > that gives you an empty list. > > In SQLObject if you want to do .select(), do it like this: > > class MyTable(SQLObject): > name = StringCol() > > names = MyTable.select(MyTable.q.name == "test") > > For joins (ForeeignKey, MultipleJoin, RelatedKoin) queries are more > complex as you have to construct join yourself. > > Oleg. |