Hi;<br>At one point Dennis Lee Bieber helped me with the following slightly modified code:<br><br>#!/usr/bin/python<br><br>import sys,os<br>sys.path.append(os.getcwd())<br>import MySQLdb<br>from login import login<br>import re, string<br>
<br>def printTree(aTree, level=0):<br> tree = []<br> for name in sorted(aTree.keys()):<br> tree.append("%s%s") % ("\t" * level, name)<br> printTree(aTree[name], level + 1)<br><br>def expand(fetched):<br>
aDict = {}<br> for (name, ) in fetched:<br> aDict[name] = {}<br> return aDict<br><br>def getChildren(levelDict, level = 0):<br> MAXLEVEL = 7<br> if level > MAXLEVEL:<br> return #possibly the data has a cycle/loop<br>
for (nm, dt) in levelDict:<br> cursor.execute('''select <a href="http://c.name">c.name</a> from categories as c<br> inner join relationship as r<br> on c.ID = r.Child<br> inner join categories as p<br>
on r.Parent = p.ID<br> where p.category = %s<br> order by <a href="http://c.name">c.name</a>''', (nm,))<br> levelDict[nm] = expand(cursor.fetchall())<br> # recursive call to do next level<br>
getChildren(levelDict[nm], level + 1)<br> # no data return as we are mutating dictionaries in place<br><br>def catTree():<br> user, passwd, db, host = login()<br> database = MySQLdb.connect(host, user, passwd, db)<br>
cursor = database.cursor()<br> cursor.execute('''create table if not exists categories <br> (ID int(3) unsigned primary key, <br> Category varchar(40), <br> Parent varchar(40))''')<br>
cursor.execute('select Category, Parent from categories;')<br> data = cursor.fetchall()<br> cursor.execute('select Category from categories order by Parent, ID')<br> print data<br> Categories = [itm[0] for itm in cursor] #untuple single column<br>
if len(Categories) > 0:<br> cursor.execute('select Parent from categories order by Parent, ID')<br> Parents = [itm[0] for itm in cursor]<br> MAXLEVEL = 15<br> cursor.execute('''create table if not exists categories<br>
(ID integer auto_increment primary key,<br> Name varchar(40) not null,<br> unique (Name)<br> )''')<br> cursor.execute('''create table if not exists Relationship<br> (ID integer auto_increment primary key,<br>
Parent integer not null,<br> foreign key (Parent) references categories (ID),<br> Child integer not null,<br> foreign key (Child) references categories (ID),<br> check (Parent <> Child) );''')<br>
# get top level<br> print 'ok'<br> cursor.execute('select category from categories order by category')<br> theTree = expand(cursor.fetchall())<br> getChildren(theTree)<br> connection.commit()<br>
return printTree(theTree)<br> else:<br> return ['There are no categories yet.']<br><br>catTree()<br><br>This throws the error:<br><br>[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] Traceback (most recent call last):<br>
[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] File "/var/www/html/<a href="http://angrynates.com/cart/createCats.py">angrynates.com/cart/createCats.py</a>", line 8, in ?<br>[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] from catTree import catTree<br>
[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] File "/var/www/html/<a href="http://angrynates.com/cart/catTree.py">angrynates.com/cart/catTree.py</a>", line 77, in ?<br>[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] catTree()<br>
[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] File "/var/www/html/<a href="http://angrynates.com/cart/catTree.py">angrynates.com/cart/catTree.py</a>", line 71, in catTree<br>[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] getChildren(theTree)<br>
[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] File "/var/www/html/<a href="http://angrynates.com/cart/catTree.py">angrynates.com/cart/catTree.py</a>", line 25, in getChildren<br>[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] for (nm, dt) in levelDict:<br>
[Fri Nov 20 07:41:11 2009] [error] [client 208.84.198.58] ValueError: too many values to unpack<br><br>There is only one category in "categories". Please advise.<br>Victor<br>