[sqlalchemy] Re: multiple table inheritance problem

2007-04-04 Thread Julien Cigar

svilen wrote:
 Julien Cigar wrote:
 
 Another quick question, relative to multiple inheritance.
 Is it common to keep a back reference to the parent class within
 the child class ?
   
 u mean theclass.__bases__? or what?

   
 The idea behind this is that I want to be able to retrieve the
 child from the parent.
   
 why u need it?

   

I wanted to do things like :
for p in Parent.select():
  if p.isChildrenInstance():
# do stuff
  elif p.isAnotherChildrenInstance():
# do stuff

mainly to avoid big queries like selecting all the children, also for 
the future if I have another subclass.

(as I said, this is not possible under traditional OO of course, but 
could works with backreferences.)

 also, I know that it's not possible under pure OO programming,
 but I wondered if it's dirty to do it like that ?
 
 it is possible, depends on the language and framework.
 e.g. in smalltalk u can ask which classes are my subclasses. But this 
 is talking about classes, not instances.

 what u mean child and parent here? if this is about tables, 
 u _can_ have pure child, but that is only incomplete/partial data; 
 full child is all parent attributes plus all child attributes 
 (parent.join(child), that is). And for each full child (complete 
 object), u have one parent-only data and one child-only data... and 
 they are 1:1, so u can get one from another and vice-versa.
 i think u either have wrong model or something i don't get?

 if u have different attributes for different Content subtypes, then 
 that means subclasses and eventualy polymorphism. Or u go the 
 single_typee (singletable) way, and put all stuff in Content, and 
 just check for presence/absence of some attributes.

   

yep I have different attributes for different content subtype, for 
example I have a class Event(Content), a class News(Content), ...
and three SQL tables : contents(id pk), events(content_id pk and fk), 
news(content_id pk and fk)
etc etc

as Mike suggested I will add a table content_types to avoid to many 
queries, so I could to:
for p in Parent.Select():
  if p.content_type.name == news:
foo = News.get(p.content_id)
# do stuff
  elif p.content_type.name == event:
bar = Event.get(p.content_id)
# do stuff


Julien
 For example I have something like:
 assign_mapper(session.context, content.Content, t_contents,
properties=dict(state =
 relation(state.State)))

 assign_mapper(session.context, folder.Folder, t_folders,
inherits=content.Content.mapper,
properties = dict(data =
 relation(content.Content, secondary=t_nodes, lazy=False)))

 assign_mapper(session.context, page.Page, t_pages,
inherits=content.Content.mapper,

 properties=dict(content=relation(content.Content,
 backref='page')))

 container = Folder.get(folder_id) # I get a Folder object
 for data in container.data:
   # Here I have Content objects
   # and I want to be able to see if the Content is a Page or a
 News or ... if data.page: ...
   elif data.news: ...
   ...

 the other idea is to add a string like page or news in the
 Content table (or another table) ..
 what do you think is the best solution ?

 Thanks,
 Julien

 Julien wrote:
   
 OK it was that !

 Thanks

 On Mon, 2007-04-02 at 12:19 -0400, Michael Bayer wrote:
 
 defintiely do not call flush() on root_folder, call it for
 the session overall.  thats probably the issue, since its
 failing to get the full set of child objects properly in the
 flush.

 On Apr 2, 2007, at 10:44 AM, Julien Cigar wrote:
   
 Hello,

 I'm playing a bit with Multiple Table Inheritance (the
 Non-polymorphic way) and I got a problem which I have
 copy/paste on
 http://rafb.net/p/HAhx8p22.html

 Here is the basic idea of what I want to do (it's a kind of
 CMS):

 - Content is the base class for all contents (Pages, News,
 Events, Folder, ...)
 - Folder is a Content which can contain one or more
 Content (Node-like structure)

 I suspect that the problem is that I don't have a sequence for
 my primary keys in my subclasses .. ?

 Thanks,
 Julien

 




-- 
Julien Cigar
Belgian Biodiversity Platform
http://www.biodiversity.be
Université Libre de Bruxelles (ULB)
Campus de la Plaine CP 257
Bâtiment NO, Bureau 4 N4 115C (Niveau 4)
Boulevard du Triomphe, entrée ULB 2
B-1050 Bruxelles
office: [EMAIL PROTECTED]
home: [EMAIL PROTECTED]
biobel reference: http://biobel.biodiversity.be/biobel/person/show/471


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: multiple table inheritance problem

2007-04-04 Thread svilen

  if u have different attributes for different Content subtypes,
  then that means subclasses and eventualy polymorphism. Or u go
  the single_typee (singletable) way, and put all stuff in Content,
  and just check for presence/absence of some attributes.

 yep I have different attributes for different content subtype, for
 example I have a class Event(Content), a class News(Content), ...
 and three SQL tables : contents(id pk), events(content_id pk and
 fk), news(content_id pk and fk)
 etc etc

 as Mike suggested I will add a table content_types to avoid to many
 queries, so I could to:
 for p in Parent.Select():
   if p.content_type.name == news:
 foo = News.get(p.content_id)
 # do stuff
   elif p.content_type.name == event:
 bar = Event.get(p.content_id)
 # do stuff


so this is the polymorhism done in python and not in SQL... 
i notice a pattern here (3 times last 2 weeks or so), may eventualy be 
mentioned/suggested in the docs about polymorphism?

hmm, just suggestion, u could do it both ways, one sql-polymorphic and 
one python-polymorphic (u have all data needed - the type column), 
via 2 mappers (e.g. the sql-polymorphic one being secondary), and use 
either one depending on use case/size/quick-and-dirty/whatever..

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: multiple table inheritance problem

2007-04-03 Thread svilen

 Julien Cigar wrote:
  Another quick question, relative to multiple inheritance.
  Is it common to keep a back reference to the parent class within
  the child class ?
u mean theclass.__bases__? or what?

  The idea behind this is that I want to be able to retrieve the
  child from the parent.
why u need it?

 also, I know that it's not possible under pure OO programming,
 but I wondered if it's dirty to do it like that ?
it is possible, depends on the language and framework.
e.g. in smalltalk u can ask which classes are my subclasses. But this 
is talking about classes, not instances.

what u mean child and parent here? if this is about tables, 
u _can_ have pure child, but that is only incomplete/partial data; 
full child is all parent attributes plus all child attributes 
(parent.join(child), that is). And for each full child (complete 
object), u have one parent-only data and one child-only data... and 
they are 1:1, so u can get one from another and vice-versa.
i think u either have wrong model or something i don't get?

if u have different attributes for different Content subtypes, then 
that means subclasses and eventualy polymorphism. Or u go the 
single_typee (singletable) way, and put all stuff in Content, and 
just check for presence/absence of some attributes.

  For example I have something like:
  assign_mapper(session.context, content.Content, t_contents,
 properties=dict(state =
  relation(state.State)))
 
  assign_mapper(session.context, folder.Folder, t_folders,
 inherits=content.Content.mapper,
 properties = dict(data =
  relation(content.Content, secondary=t_nodes, lazy=False)))
 
  assign_mapper(session.context, page.Page, t_pages,
 inherits=content.Content.mapper,
 
  properties=dict(content=relation(content.Content,
  backref='page')))
 
  container = Folder.get(folder_id) # I get a Folder object
  for data in container.data:
# Here I have Content objects
# and I want to be able to see if the Content is a Page or a
  News or ... if data.page: ...
elif data.news: ...
...
 
  the other idea is to add a string like page or news in the
  Content table (or another table) ..
  what do you think is the best solution ?
 
  Thanks,
  Julien
 
  Julien wrote:
  OK it was that !
 
  Thanks
 
  On Mon, 2007-04-02 at 12:19 -0400, Michael Bayer wrote:
  defintiely do not call flush() on root_folder, call it for
  the session overall.  thats probably the issue, since its
  failing to get the full set of child objects properly in the
  flush.
 
  On Apr 2, 2007, at 10:44 AM, Julien Cigar wrote:
  Hello,
 
  I'm playing a bit with Multiple Table Inheritance (the
  Non-polymorphic way) and I got a problem which I have
  copy/paste on
  http://rafb.net/p/HAhx8p22.html
 
  Here is the basic idea of what I want to do (it's a kind of
  CMS):
 
  - Content is the base class for all contents (Pages, News,
  Events, Folder, ...)
  - Folder is a Content which can contain one or more
  Content (Node-like structure)
 
  I suspect that the problem is that I don't have a sequence for
  my primary keys in my subclasses .. ?
 
  Thanks,
  Julien
 

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: multiple table inheritance problem

2007-04-02 Thread izekia

Column('content_id', Integer, ForeignKey('contents.id'),
primary_key=True, nullable=False))
'primary_key=True' when you define one already, will work?

On Apr 2, 6:44 pm, Julien Cigar [EMAIL PROTECTED] wrote:
 Hello,

 I'm playing a bit with Multiple Table Inheritance (the Non-polymorphic
 way) and I got a problem which I have copy/paste 
 onhttp://rafb.net/p/HAhx8p22.html

 Here is the basic idea of what I want to do (it's a kind of CMS):

 - Content is the base class for all contents (Pages, News, Events,
 Folder, ...)
 - Folder is a Content which can contain one or more Content
 (Node-like structure)

 I suspect that the problem is that I don't have a sequence for my
 primary keys in my subclasses .. ?

 Thanks,
 Julien

 --
 Julien Cigar
 Belgian Biodiversity Platformhttp://www.biodiversity.be
 Université Libre de Bruxelles (ULB)
 Campus de la Plaine CP 257
 Bâtiment NO, Bureau 4 N4 115C (Niveau 4)
 Boulevard du Triomphe, entrée ULB 2
 B-1050 Bruxelles
 office: [EMAIL PROTECTED]
 home: [EMAIL PROTECTED]
 biobel reference:http://biobel.biodiversity.be/biobel/person/show/471


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: multiple table inheritance problem

2007-04-02 Thread Julien Cigar

izekia wrote:
 Column('content_id', Integer, ForeignKey('contents.id'),
 primary_key=True, nullable=False))
 'primary_key=True' when you define one already, will work?

   

yep, you can have multiple primary_key for one Table() object :)

 On Apr 2, 6:44 pm, Julien Cigar [EMAIL PROTECTED] wrote:
   
 Hello,

 I'm playing a bit with Multiple Table Inheritance (the Non-polymorphic
 way) and I got a problem which I have copy/paste 
 onhttp://rafb.net/p/HAhx8p22.html

 Here is the basic idea of what I want to do (it's a kind of CMS):

 - Content is the base class for all contents (Pages, News, Events,
 Folder, ...)
 - Folder is a Content which can contain one or more Content
 (Node-like structure)

 I suspect that the problem is that I don't have a sequence for my
 primary keys in my subclasses .. ?

 Thanks,
 Julien

 --
 Julien Cigar
 Belgian Biodiversity Platformhttp://www.biodiversity.be
 Université Libre de Bruxelles (ULB)
 Campus de la Plaine CP 257
 Bâtiment NO, Bureau 4 N4 115C (Niveau 4)
 Boulevard du Triomphe, entrée ULB 2
 B-1050 Bruxelles
 office: [EMAIL PROTECTED]
 home: [EMAIL PROTECTED]
 biobel reference:http://biobel.biodiversity.be/biobel/person/show/471
 





-- 
Julien Cigar
Belgian Biodiversity Platform
http://www.biodiversity.be
Université Libre de Bruxelles (ULB)
Campus de la Plaine CP 257
Bâtiment NO, Bureau 4 N4 115C (Niveau 4)
Boulevard du Triomphe, entrée ULB 2
B-1050 Bruxelles
office: [EMAIL PROTECTED]
home: [EMAIL PROTECTED]
biobel reference: http://biobel.biodiversity.be/biobel/person/show/471


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: multiple table inheritance problem

2007-04-02 Thread Michael Bayer

defintiely do not call flush() on root_folder, call it for the  
session overall.  thats probably the issue, since its failing to get  
the full set of child objects properly in the flush.

On Apr 2, 2007, at 10:44 AM, Julien Cigar wrote:


 Hello,

 I'm playing a bit with Multiple Table Inheritance (the Non-polymorphic
 way) and I got a problem which I have copy/paste on
 http://rafb.net/p/HAhx8p22.html

 Here is the basic idea of what I want to do (it's a kind of CMS):

 - Content is the base class for all contents (Pages, News, Events,
 Folder, ...)
 - Folder is a Content which can contain one or more Content
 (Node-like structure)

 I suspect that the problem is that I don't have a sequence for my
 primary keys in my subclasses .. ?

 Thanks,
 Julien

 -- 
 Julien Cigar
 Belgian Biodiversity Platform
 http://www.biodiversity.be
 Université Libre de Bruxelles (ULB)
 Campus de la Plaine CP 257
 Bâtiment NO, Bureau 4 N4 115C (Niveau 4)
 Boulevard du Triomphe, entrée ULB 2
 B-1050 Bruxelles
 office: [EMAIL PROTECTED]
 home: [EMAIL PROTECTED]
 biobel reference: http://biobel.biodiversity.be/biobel/person/show/471


 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---



[sqlalchemy] Re: multiple table inheritance problem

2007-04-02 Thread Julien

OK it was that !

Thanks

On Mon, 2007-04-02 at 12:19 -0400, Michael Bayer wrote:
 defintiely do not call flush() on root_folder, call it for the  
 session overall.  thats probably the issue, since its failing to get  
 the full set of child objects properly in the flush.
 
 On Apr 2, 2007, at 10:44 AM, Julien Cigar wrote:
 
 
  Hello,
 
  I'm playing a bit with Multiple Table Inheritance (the Non-polymorphic
  way) and I got a problem which I have copy/paste on
  http://rafb.net/p/HAhx8p22.html
 
  Here is the basic idea of what I want to do (it's a kind of CMS):
 
  - Content is the base class for all contents (Pages, News, Events,
  Folder, ...)
  - Folder is a Content which can contain one or more Content
  (Node-like structure)
 
  I suspect that the problem is that I don't have a sequence for my
  primary keys in my subclasses .. ?
 
  Thanks,
  Julien
 
  -- 
  Julien Cigar
  Belgian Biodiversity Platform
  http://www.biodiversity.be
  Universit� Libre de Bruxelles (ULB)
  Campus de la Plaine CP 257
  B�timent NO, Bureau 4 N4 115C (Niveau 4)
  Boulevard du Triomphe, entr�e ULB 2
  B-1050 Bruxelles
  office: [EMAIL PROTECTED]
  home: [EMAIL PROTECTED]
  biobel reference: http://biobel.biodiversity.be/biobel/person/show/471
 
 
  
 
 
 

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---