我有一个sqlalchemy类R
,它在另外两个类A
和B
之间实现了m:n关系。因此R
有两个整数列source_id
和target_id
,它们包含引用实例的ID。 R
有两个属性source_obj
和target_obj
,它们是通过relationship
定义的。它与文档中描述的here大致相同。
我想要做的是从R
检索引用的类。我正在使用sqlalchemy 0.8并试图在inspect()
上使用R.source_obj
方法,但我只回到InstrumentedAttribute
这似乎没什么帮助。至少我无法提取任何有用的信息或找到任何有关它的文档。
任何帮助都将非常感谢!如何从A
获取B
和R
?
答案 0 :(得分:2)
尝试这样的事情。我也在处理这个问题而没有找到任何文档,认为这可以帮助你开始。
from sqlalchemy import inspect
i = inspect(model)
for relation in i.relationships:
print(relation.direction.name)
print(relation.remote_side)
print(relation._reverse_property)
dir(relation)
答案 1 :(得分:0)
我花了大部分时间处理同样的问题,我能够编写一个列表理解,它接受一个表,然后吐出一个表名列表,这些表通过关系或外键连接。您需要将该字符串转换为对实际类的引用,否则它可以正常工作。
relationship_list = [str(list(column.remote_side)[0]).split('.')[0] for column \
in inspect(table).relationships]
通过删除.split('.')[0]
,您可以获得连接引用的实际列的列表。这种理解非常难看,但它确实有效。希望这能帮助其他寻找同样事物的人!