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