Hi,

Let's start with the simple example based on movie/director example

  class Director(Base):
      __tablename__ = 'director'
      id             = Column(Integer, primary_key=True)
      last_name   = Column(String(60), nullable=False)
      movies      = relation('Movie', backref='director',
cascade='all, delete-orphan',)

  class Movie(Base):
      __tablename__  = 'movie'
      id             = Column(Integer, primary_key=True)
      title          = Column(String(60), nullable=False)
      director_id    = Column(Integer, ForeignKey('director.id'),
nullable=False)

Due to delete-orphan cascading rule when creating a movie object I
need to
attach a director object. In a table editor when setting a foreign key
I
parse all the properties to see if someone requires such 'director'
obj so
that I can easily fetch it and attach. The working code in 0.5 is as
follows:

  def get_props_for_delete_orphan(mapper, field_name):
      """
      discover if field_name setting needs to set an object to
fullfill the request
      for a delete_orphan cascading on a possible relation
      returns the generator for the properties or ()
      """
      prop = mapper.get_property(field_name)
      assert isinstance(prop, properties.ColumnProperty)
      assert len(prop.columns) == 1  # I don't handle mapper with two
columns in a property
      column = prop.columns[0]

      props = []
      for pr in mapper.iterate_properties:
          if isinstance(pr, properties.RelationProperty):
              if pr.direction.name in ('MANYTOONE',):
                  for col in pr.local_remote_pairs[0]:
                      # I can't use col in p.local_remote_pairs
                      # as it uses 'col == p.local_remote_pairs' that evaluates
                      # to a BinaryExpression
                      if column is col:
                          try:
                              if pr.backref.prop.cascade.delete_orphan:
                                  props += [pr]
                          except AttributeError, e:
                              pass
      return tuple(props)

This fails in sqla 0.6 as pr.backref is empty. Which is the correct
way to
get the properties that have a backref that have cascade with
delete_orphan?


thanks
sandro
*:-)

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
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.

Reply via email to