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?

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.

Reply via email to