9

让我们有一个类 X 和 Y 以及它们之间的关系 x2y 和 y2x。从 class_mapper(Class).iterate_properties 迭代器我们可以得到所有类的属性。所以 x2y 和 y2x 是关系属性,我希望从中获得的是关系远程端的对象的类或类名。

我已经尝试提出解决方案。我发现x2y.remote_side[0].table.name,制作了一个将表名映射到类的 tables_map,它适用于一对多和一对一。如果我将它用于多对多,则表名是关联表。

关于如何获得远程课程的任何提示?

4

2 回答 2

26

X.x2y.property.mapper.class_

relatonshipproperty 最终将获得与 mapper 现在相同的类级别属性文档。

编辑。这是一个测试,说明上述从“X”返回“Y”,并且没有反射不会创建关系,因此应该没有效果:

from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
class X(Base):
    __tablename__ = 'x'
    id = Column(Integer, primary_key=True)
    x2y = relationship("Y")

class Y(Base):
    __tablename__ = 'y'
    id = Column(Integer, primary_key=True)
    x_id = Column(Integer, ForeignKey("x.id"))

assert X.x2y.property.mapper.class_ is Y
于 2011-07-27T19:32:56.340 回答
3

我发现 relationshipproperty 上的方法 argument() 返回远程类。

for prop in class_mapper(X).iterate_properties:
    if isinstance(prop, RelationshipProperty):
        relation = prop
relation.argument()
于 2011-07-31T12:21:34.673 回答