Thread: [SQLObject] Question about a component using sqlmeta, that has a compound key....
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Mark T. <da...@gm...> - 2006-04-19 16:42:27
|
Found the stuff in the FAQ on sqlobject.org about how to do compound keys....my issue is close to this: I have a table with two keys, and it is a many to many relationship. The keys are both have forein key constraints with other tables in the schema. The primary key of this table is defined as a compound key made up of both fields... After looking through the faq, and thinking a bit, I cobbled some code together which does not seem to work. Help? This is my current sqlobject: class FileIndex(SQLObject): class sqlmeta: table =3D 'file_index' idName =3D 'file_name' idType =3D str fromDatabase =3D True #cacheValues =3D False def _init(self): SQLObject._init(self) self._SFIR=3DSOFileIndexRecord(self) def _get_SFIR(self): return self._SFIR class SOFileIndexRecord(object): def __init__(self, so): self._so=3Dso def _get_code(self): return self._so.code def _set_code(self, value): self._so.code=3Dvalue testCode=3Dproperty(_get_code, _set_code) def _get_fileName(self): return self._so.fileName def _set_fileName(self, value): self._so.fileName=3Dvalue fileName=3Dproperty(_get_fileName, _set_fileName) This is the table as it stands according to my schema: create table file_index ( code varchar REFERENCES metainfo (code), file_name varchar REFERENCES files (file_name), PRIMARY KEY (code, file_name) ); |
From: Oleg B. <ph...@ma...> - 2006-04-19 16:52:22
|
On Wed, Apr 19, 2006 at 12:42:22PM -0400, Mark True wrote: > After looking through the faq, and thinking a bit, I cobbled some code > together which does not seem to work. Help? In what way it doesn't work? > class FileIndex(SQLObject): > class sqlmeta: > table = 'file_index' > idName = 'file_name' > idType = str Here you promise to SQLObject that your file_name column is at least unique and can be used to select rows. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Mark T. <da...@gm...> - 2006-04-19 16:59:51
|
I didn't even see that...good point. Since the idName is not a compound ke= y I wonder if that is causing the error... I changed it and this is what I am seeing: Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> foo=3DFileIndex(test_code=3D'foo', file_name=3D'bar') Traceback (most recent call last): File "<console>", line 1, in ? File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1197, in __init__ self._create(id, **kw) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1216, in _create raise TypeError, "%s() did not get expected keyword argument %s" % (self.__class__.__name__, column.name) TypeError: FileIndex() did not get expected keyword argument testCodeID >>> On 4/19/06, Oleg Broytmann < ph...@ma...> wrote: > > On Wed, Apr 19, 2006 at 12:42:22PM -0400, Mark True wrote: > > After looking through the faq, and thinking a bit, I cobbled some code > > together which does not seem to work. Help? > > In what way it doesn't work? > > > class FileIndex(SQLObject): > > class sqlmeta: > > table =3D 'file_index' > > idName =3D 'file_name' > > idType =3D str > > Here you promise to SQLObject that your file_name column is at least > unique and can be used to select rows. > > Oleg. > -- > Oleg Broytmann http://phd.pp.ru/ ph...@ph... > Programmers don't die, they just GOSUB without RETURN. > > > ------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronim= o > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: Oleg B. <ph...@ph...> - 2006-04-19 17:41:58
|
On Wed, Apr 19, 2006 at 12:59:48PM -0400, Mark True wrote: > >>> foo=FileIndex(test_code='foo', file_name='bar') > TypeError: FileIndex() did not get expected keyword argument testCodeID It seems SQLObject recognized test_code column as a ForeignKey. Try foo=FileIndex(testCodeID='foo', file_name='bar') Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Mark T. <da...@gm...> - 2006-04-19 17:56:59
|
I did that and got: >>> foo=3DFileIndex(testCodeID=3D'foo', file_name=3D'bar') Traceback (most recent call last): File "<console>", line 1, in ? File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1197, in __init__ self._create(id, **kw) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1216, in _create raise TypeError, "%s() did not get expected keyword argument %s" % (self.__class__.__name__, column.name) TypeError: FileIndex() did not get expected keyword argument fileNameID So I tried with fileNameId and got: >>> foo=3DFileIndex(testCodeID=3D'foo', fileNameID=3D'bar') Traceback (most recent call last): File "<console>", line 1, in ? File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1197, in __init__ self._create(id, **kw) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1224, in _create self._SO_finishCreate(id) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/main.py", line 1248, in _SO_finishCreate id, names, values) File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/dbconnection.py", line 752, in queryInsertID return self._dbConnection._queryInsertID( File "/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packa= ges/SQLObject- 0.7.1dev_r1457-py2.4.egg/sqlobject/postgres/pgconnection.py", line 122, in _queryInsertID c.execute("SELECT NEXTVAL('%s')" % sequenceName) ProgrammingError: relation "file_index_id_seq" does not exist On 4/19/06, Oleg Broytmann <ph...@ph...> wrote: > > On Wed, Apr 19, 2006 at 12:59:48PM -0400, Mark True wrote: > > >>> foo=3DFileIndex(test_code=3D'foo', file_name=3D'bar') > > TypeError: FileIndex() did not get expected keyword argument testCodeID > > It seems SQLObject recognized test_code column as a ForeignKey. Try > > foo=3DFileIndex(testCodeID=3D'foo', file_name=3D'bar') > > Oleg. > -- > Oleg Broytmann http://phd.pp.ru/ ph...@ph... > Programmers don't die, they just GOSUB without RETURN. > > > ------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronim= o > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: Oleg B. <ph...@ma...> - 2006-04-19 18:09:59
|
On Wed, Apr 19, 2006 at 01:56:26PM -0400, Mark True wrote: > ProgrammingError: relation "file_index_id_seq" does not exist When you 'id' column is not int yuo must pass explicit id parameter: MyTable(id="value") Without this SQLObject tries to get an autoincremented id; from a sequence in Postgres. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Mark T. <da...@gm...> - 2006-04-19 19:09:41
|
How can I pass an id parameter? The id is the whole row! I sent this earlier, here is the SQL I used to make the table: This is the table as it stands according to my schema: create table file_index ( code varchar REFERENCES metainfo (code), file_name varchar REFERENCES files (file_name), PRIMARY KEY (code, file_name) ); The primary key is a compound of (code, file_name) --Mark On 4/19/06, Oleg Broytmann <ph...@ma...> wrote: > > On Wed, Apr 19, 2006 at 01:56:26PM -0400, Mark True wrote: > > ProgrammingError: relation "file_index_id_seq" does not exist > > When you 'id' column is not int yuo must pass explicit id parameter: > > MyTable(id=3D"value") > > Without this SQLObject tries to get an autoincremented id; from a > sequence in Postgres. > > Oleg. > -- > Oleg Broytmann http://phd.pp.ru/ ph...@ph... > Programmers don't die, they just GOSUB without RETURN. > > > ------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronim= o > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=3D120709&bid=3D263057&dat= =3D121642 > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: Oleg B. <ph...@ph...> - 2006-04-19 19:29:11
|
On Wed, Apr 19, 2006 at 03:09:23PM -0400, Mark True wrote: > The primary key is a compound of (code, file_name) SQLObject currently doesn't support this. So either adapt your database to SQLObject ("ALTER TABLE file_index ADD COLUMN id serial") or adapt (patch) SQLObject to the multicolumn primary keys. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |