Hi everybody. I've recently started using SQLObject for a Python program I'm 
writing to replace the previous object structure (was using Pickle but it got 
too big :P).
Anyway, the relevant part is this: I have a File object (that I defined) and a 
Directory object, like so:

class File(InheritableSQLObject):
    name = StringCol()
    root = ForeignKey("Directory", default=None)

class Directory(File):
    dirs = MultipleJoin("Directory", joinColumn="root_id")
    files = MultipleJoin("File", joinColumn="root_id")

File has more attributes, but I only put the relevant ones. As can be seen, 
each file has a root FK which points to the parent directory. Since 
directories are files, they inherit from File and the only extra attributes 
they provide are two lists, one for the files it contains and one for the 
subdirectories it contains. While I could do without this last part, it is 
there for compatibility's sake (since the old structure worked more or less 
like this). Changing this would require another further rewrite, which I'm 
trying to avoid.

So, the problem: wether I retrieve a Directory through Directory.select or 
Directory.selectBy, I can access directory.files fine, but whenever I try to 
access directory.dirs, I get this:

.select:

  File "/home/godlike/workspace/python/indexor/controller/tvhandler.py", line 
133, in append_directories
    print _dir.dirs
  File "<string>", line 1, in <lambda>
  File "/usr/lib64/python2.6/site-packages/sqlobject/joins.py", line 144, in 
performJoin
    inst.id)
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
549, in _SO_selectJoin
    self.sqlrepr(value)))
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
362, in queryAll
    return self._runWithConnection(self._queryAll, s)
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
262, in _runWithConnection
    val = meth(conn, *args)
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
355, in _queryAll
    self._executeRetry(conn, c, s)
  File "/usr/lib64/python2.6/site-
packages/sqlobject/sqlite/sqliteconnection.py", line 183, in _executeRetry
    raise OperationalError(ErrorMessage(e))
sqlobject.dberrors.OperationalError: no such column: root_id

Select performed:
 1/Select  :  SELECT file.id, file.parent, file.name, file.relpath, 
file.mimetype, file.atime, file.mtime, file.size, file.strsize, file.isdir, 
file.root_id, file.child_name FROM file WHERE (((file.name) = ('Desktop')) AND 
((file.child_name) = ('Directory'))) LIMIT 1
 1/QueryR  :  SELECT file.id, file.parent, file.name, file.relpath, 
file.mimetype, file.atime, file.mtime, file.size, file.strsize, file.isdir, 
file.root_id, file.child_name FROM file WHERE (((file.name) = ('Desktop')) AND 
((file.child_name) = ('Directory'))) LIMIT 1
 1/Select children of the class Directory:  SELECT directory.id, 
directory.child_name FROM directory WHERE ((directory.id) = (1))
 1/QueryR  :  SELECT directory.id, directory.child_name FROM directory WHERE 
((directory.id) = (1))
 1/COMMIT  :  auto
 1/QueryAll:  SELECT id FROM directory WHERE root_id = (1)
 1/QueryR  :  SELECT id FROM directory WHERE root_id = (1)
 1/COMMIT  :  auto

========================

.selectBy:
  File "/home/godlike/workspace/python/indexor/controller/tvhandler.py", line 
133, in append_directories
    print _dir.dirs
  File "<string>", line 1, in <lambda>
  File "/usr/lib64/python2.6/site-packages/sqlobject/joins.py", line 144, in 
performJoin
    inst.id)
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
549, in _SO_selectJoin
    self.sqlrepr(value)))
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
362, in queryAll
    return self._runWithConnection(self._queryAll, s)
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
262, in _runWithConnection
    val = meth(conn, *args)
  File "/usr/lib64/python2.6/site-packages/sqlobject/dbconnection.py", line 
355, in _queryAll
    self._executeRetry(conn, c, s)
  File "/usr/lib64/python2.6/site-
packages/sqlobject/sqlite/sqliteconnection.py", line 183, in _executeRetry
    raise OperationalError(ErrorMessage(e))
sqlobject.dberrors.OperationalError: no such column: root_id

Select performed:
 1/Select  :  SELECT directory.id, directory.child_name FROM directory, file 
WHERE ((((file.name) = ('Desktop')) AND ((directory.id) = (file.id))) AND 
((directory.id) = (file.id))) LIMIT 1
 1/QueryR  :  SELECT directory.id, directory.child_name FROM directory, file 
WHERE ((((file.name) = ('Desktop')) AND ((directory.id) = (file.id))) AND 
((directory.id) = (file.id))) LIMIT 1
 1/COMMIT  :  auto
 1/QueryAll:  SELECT id FROM directory WHERE root_id = (1)
 1/QueryR  :  SELECT id FROM directory WHERE root_id = (1)
 1/COMMIT  :  auto


Any ideas?

Thanks
Juan Manuel

------------------------------------------------------------------------------
The Planet: dedicated and managed hosting, cloud storage, colocation
Stay online with enterprise data centers and the best network in the business
Choose flexible plans and management services without long-term contracts
Personal 24x7 support from experience hosting pros just a phone call away.
http://p.sf.net/sfu/theplanet-com
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to