Thread: [SQLObject] [newbie] problem with MultipleJoin
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <pa...@su...> - 2004-09-17 08:02:37
|
Hi folks, I'm stuck ATM wrt sqlobject and MultipleJoin. My classes: class CaCert(CertItem): SignedCaCerts = MultipleJoin('SubCaCert') ... class SubCaCert(CertItem): Ca = ForeignKey('CaCert') ... class EmailSubCa(SubCaCert): SignedCerts = MultipleJoin('EmailCert') _table = "sub_ca_cert" ... ----test test test----- rootca = CaCert.new(**rootca_params) ... emailca_params['CA'] = rootca emailca = EmailSubCa.new(**emailca_params) ... print rootca.Serial --> fine ;) print emailca.Serial --> fine ;) print emailca.Ca --> fine ;) (shows the CaCert instance) however, the backreference doesn't work: print rootca.SignedCaCerts Traceback (most recent call last): File "certs.py", line 408, in ? print rootca.SignedCaCerts File "<string>", line 1, in <lambda> File "/usr/lib/python2.2/site-packages/SQLObject/Join.py", line 104, in performJoin inst.id) File "/usr/lib/python2.2/site-packages/SQLObject/DBConnection.py", line 309, in _SO_selectJoin return self.queryAll("SELECT %s FROM %s WHERE %s = %s" % File "/usr/lib/python2.2/site-packages/SQLObject/DBConnection.py", line 139, in queryAll return self._runWithConnection(self._queryAll, s) File "/usr/lib/python2.2/site-packages/SQLObject/DBConnection.py", line 74, in _runWithConnection val = meth(conn, *args) File "/usr/lib/python2.2/site-packages/SQLObject/DBConnection.py", line 132, in _queryAll c.execute(s) File "/usr/lib/python2.2/site-packages/sqlite/main.py", line 243, in execute self.rs = self.con.db.execute(SQL) _sqlite.DatabaseError: no such column: ca_cert_id I'd expect that SignedCaCerts = MultipleJoin('SubCaCert') will create a "sub_ca_cert_id" column which in turn will be asked for and not "ca_cert_id". Any ideas? Thanks Paul |
From: <pa...@su...> - 2004-09-18 19:33:39
|
paul k=F6lle wrote: just for the record: > class CaCert(CertItem): > SignedCaCerts =3D MultipleJoin('SubCaCert') > ... >=20 > class SubCaCert(CertItem): > Ca =3D ForeignKey('CaCert') > ... That's apparently wrong. In order to work such the name of the column=20 *has* to be the same as the referenced object (case insensitive?). While=20 the documentation gives a perfectly valid example ( person =3D=20 ForeignKey('Person')) it was not clear to me that those strings have to=20 be equal. The documentation notes the correspondence of the 'Person'=20 string with another class in the db nothing more. Maybe it's just me=20 knowing almost nothing about db/sql/whatever ... ;) :P |
From: Ian B. <ia...@co...> - 2004-09-20 01:25:25
|
paul kölle wrote: > paul kölle wrote: > > just for the record: > >> class CaCert(CertItem): >> SignedCaCerts = MultipleJoin('SubCaCert') >> ... >> >> class SubCaCert(CertItem): >> Ca = ForeignKey('CaCert') >> ... > > That's apparently wrong. In order to work such the name of the column > *has* to be the same as the referenced object (case insensitive?). While > the documentation gives a perfectly valid example ( person = > ForeignKey('Person')) it was not clear to me that those strings have to > be equal. The documentation notes the correspondence of the 'Person' > string with another class in the db nothing more. Maybe it's just me > knowing almost nothing about db/sql/whatever ... ;) You did encounter a bug. There's already a bug reported that is, I think, related to this -- basically an issue with the automatic naming with MultipleJoins. When I started using attributes instead of giving the names in the MultipleJoin constructor, I didn't convert everything over properly. -- Ian Bicking / ia...@co... / http://blog.ianbicking.org |