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.