Tvrtko wrote:
> I have a schema that cannot be changed. In it, there is a table with
> two columns:
>
>     element_type CHAR(1)
>     element_id INTEGER
>
> There is no foreign key on element_id because it can point to
> different, unrelated
> tables (element_type) says where element_id points to.
>
> How can I model this in sqlalchemy?

this is a rails-style "polymorphic association" (note that Hibernate calls
it this as well:  "The <any> mapping element defines a polymorphic
association to classes from multiple tables.").  See the example
examples/poly_assoc/poly_assoc.py in the distro as well as the discussion
at http://techspot.zzzeek.org/?p=13 .







>
> I know how to load and store element using property:
>
>     def _get_element(self):
>         if self.need_element_reload():
>             clazz = self.get_class_from_type(self._element_type)
>             self._element =
> object_session(self).query(clazz).get(self.element_id)
>         return self._element
>     def _set_element(self, element):
>         self._element_type = self.get_type_from_instance(element)
>         self._element_id = element.id if element else None
>         self._element = element
>     element = property(_get_element, _set_element)
>
> But this is not good enough. For example, if I create new element
> which
> is not yet flushed, there is no id. Normally, sqlalchemy knows about
> relationships and finishes the foreign key column assignment
> once the pointed-to id is known. How can I model this type of
> relationship so that sqlalchemy will do the right thing
> (assign element_id in a flush process, or more generally behave
> like this is a normal relationship).
>
> I'm not sure if I explained it correctly, so I'll just mention that
> hibernate has <any> element that can do just that.
>
> Thanks,
> Tvrtko
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
>

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

Reply via email to