SqlAlchemy:检查/反映有关关系的信息

时间:2012-09-14 22:08:02

标签: python reflection sqlalchemy

我有一个sqlalchemy类R,它在另外两个类AB之间实现了m:n关系。因此R有两个整数列source_idtarget_id,它们包含引用实例的ID。 R有两个属性source_objtarget_obj,它们是通过relationship定义的。它与文档中描述的here大致相同。

我想要做的是从R检索引用的类。我正在使用sqlalchemy 0.8并试图在inspect()上使用R.source_obj方法,但我只回到InstrumentedAttribute这似乎没什么帮助。至少我无法提取任何有用的信息或找到任何有关它的文档。

任何帮助都将非常感谢!如何从A获取BR

2 个答案:

答案 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],您可以获得连接引用的实际列的列表。这种理解非常难看,但它确实有效。希望这能帮助其他寻找同样事物的人!