Thread: [SQLObject] Inheritance management
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Philippe N. <ph...@re...> - 2005-04-28 11:07:47
|
Hi, I'd like to make my DB schema evolve a bit. And i came to a little issue. Here is what i want to do: - i have two classes: A and B. - i'd like to make A and B inherit from a class C. The fact is, since A et B used to exist "in their corner", i can have both some A and B objects with the same ID. From what i understood from the Inheritance documentation, when i will create a A instance, it's ID will also be inserted in C, something like: (someID, "A"). But it seems like the primary key C will only be its id. So i won't be able to have (for instance): 3, "A" 3, "B" in C :( So, could it be possible to make the above not break ? Something like a compound key (id, childName) in InheritableSQLObject ? Philippe |
From: Oleg B. <ph...@ma...> - 2005-04-28 11:16:50
|
On Thu, Apr 28, 2005 at 01:07:40PM +0200, Philippe Normand wrote: > - i'd like to make A and B inherit from a class C. > > The fact is, since A et B used to exist "in their corner", i can have > both some A and B objects with the same ID. From what i understood from > the Inheritance documentation, when i will create a A instance, it's ID > will also be inserted in C, something like: (someID, "A"). Exactly opposite. a = A() b = B() The first insert goes to C: (1, 'A') Then this id returned to A (a.id == 1) The next insert again goes to C: (2, 'B') Now b.id == 2. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Philippe N. <ph...@re...> - 2005-04-28 11:21:28
|
Le 28/4/2005, "Oleg Broytmann" <ph...@ma...> a =E9crit: >On Thu, Apr 28, 2005 at 01:07:40PM +0200, Philippe Normand wrote: >> - i'd like to make A and B inherit from a class C. >> >> The fact is, since A et B used to exist "in their corner", i can have >> both some A and B objects with the same ID. From what i understood from >> the Inheritance documentation, when i will create a A instance, it's ID >> will also be inserted in C, something like: (someID, "A"). > > Exactly opposite. > > a =3D A() > b =3D B() > > The first insert goes to C: >(1, 'A') > Then this id returned to A (a.id =3D=3D 1) > > The next insert again goes to C: >(2, 'B') > Now b.id =3D=3D 2. > Oh ok ;-) But this doesn't change the problem. I don't want to change all existing ids in A and B, so do you see a simple way to avoid id clashes in C ? Philippe |
From: Oleg B. <ph...@ma...> - 2005-04-28 12:01:18
|
On Thu, Apr 28, 2005 at 01:21:22PM +0200, Philippe Normand wrote: > Oh ok ;-) But this doesn't change the problem. I don't want to change > all existing ids in A and B, so do you see a simple way to avoid id > clashes in C ? There is no a simple way. You'd better planned inheritance from the very beginning. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |