Python + SQLAlchemy:从InstrumentedList获取mapper类?

时间:2013-03-11 19:48:11

标签: python orm sqlalchemy

我想动态获取InstrumentedList实例使用的SQLAlchemy映射器类。

我有一个1-M ParentClass-ChildClass(让我们调用myRelation列),而parentInstance.myRelation是InstrumentedList实例。我可以破解它并在InstrumentedList中获取第一个实例的类,但如果InstrumentedList中没有对象,则这不起作用。

原因:我需要将包含mapper类X属性的Python字典附加到InstrumentedList,但我不知道运行时的mapper类。由于我无法附加字典,我需要获取映射器类。

感谢。

1 个答案:

答案 0 :(得分:4)

该关系通过property与检测列表相关联。所以从这个普通的香草映射开始:

from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class A(Base):
    __tablename__ = "a"
    id = Column(Integer, primary_key=True)
    bs = relationship("B")

class B(Base):
    __tablename__ = "b"
    id = Column(Integer, primary_key=True)
    a_id = Column(Integer, ForeignKey('a.id'))

在SQLAlchemy的任何最新版本中,您都可以这样看到:

print A.bs.property.mapper.class_

在0.8中有更多可用的API,你可以这样做:

from sqlalchemy import inspect
print inspect(A.bs).mapper.class_

检查文档 - > http://docs.sqlalchemy.org/en/rel_0_8/core/inspection.html

“mapper-> class_”的文档 - > http://docs.sqlalchemy.org/en/rel_0_8/orm/mapper_config.html#sqlalchemy.orm.mapper.Mapper.class_