Thread: [SQLObject] Handling circular references with Automatic Table Generation
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Rajeev J S. <raj...@di...> - 2005-04-30 20:33:37
|
Hi, I am having some trouble with automatic creation of Tables with 2 classes which have references to each other: A person object may be associated with a participant object, and a participant object is associated with a person object. The problem comes when I use Person.createTable() ... it gives an error that the participant table doesnt exist, and Participant.createTable() (if done before Person.createTable()) reports the same re person table. Is there some way I can continue to use the automatic table generation but still use these circular references ? Rajeev J Sebastian |
From: Oleg B. <ph...@ma...> - 2005-04-30 21:36:21
|
On Sun, May 01, 2005 at 02:03:23AM +0000, Rajeev J Sebastian wrote: > A person object may be associated with a participant object, > and a participant object is associated with a person object. > > The problem comes when I use > Person.createTable() ... > it gives an error that the participant table doesnt exist, > and Participant.createTable() (if done before Person.createTable()) > reports the same re person table. > > Is there some way I can continue to use the automatic table generation but > still use these circular references ? There is no. You can choose one of these ways: 1) CREATE TABLEs manually; you have to CREATE the first table without references, then the second table, and then ADD references to the first table; 2) emulate this using SQLObject using .addColumn() or .addJoin() methods with changeSchema=True; 3) change you tables; instead of 2 ForeignKeys use one ForeignKey and one MultipleJoin - this is much more natural. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Rajeev J S. <raj...@di...> - 2005-05-01 09:41:30
|
> > Is there some way I can continue to use the automatic table generation > > but still use these circular references ? > > There is no. You can choose one of these ways: > > 1) CREATE TABLEs manually; you have to CREATE the first table without > references, then the second table, and then ADD references to the first > table; > > 2) emulate this using SQLObject using .addColumn() or .addJoin() methods > with changeSchema=True; Tried this method, but it didnt work. Specifically, it created the participant_id, but, it doesnt generate the setParticipant method. > 3) change you tables; instead of 2 ForeignKeys use one ForeignKey and > one MultipleJoin - this is much more natural. But the relationship is 1:1 not 1:n, so in this case, it is not natural. It is perhaps a good workaround :) > Oleg. Rajeev J Sebastian |