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
|