Given a table that has a relation:
class Child(Model):
...
parent = relationship('Parent')
If we have an instance child = Child(...)
of the class and an InstrumentedAttribute
attr = Child.parent
of one of the class's relationships1, is there a clean way to get the related object of the instance (i.e. child.parent
in this case)? Doing
getattr(child, attr.key)
works, of course, but using reflection when we have a "proper" accessor is a pretty questionable code smell. (It also depends on the lower-level .key
API for the high-level task of accessing an attribute, which is also smelly.)
The reason behind this question is that I am writing generic code to be used on multiple tables, where the relationship is specified at the call site. This means that child.parent
will not work, as the relationship to be used might not be called parent
. (The name could be passed in as an additional string argument, but then we're back to using getattr
.)
Is there a more idiomatic way to do this?
1 Presumably, a solution would also work for InstrumentedAttribute
s of vanilla columns as well, but that's not a requirement.
question from:
https://stackoverflow.com/questions/65941632/get-child-table-by-orm-relationship 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…