2

InstrumentedList のインスタンスが使用する SQLAlchemy マッパー クラスを動的に取得したいと考えています。

1-M の ParentClass-ChildClass (列を myRelation と呼びましょう) があり、parentInstance.myRelation は InstrumentedList インスタンスです。それをハックして、InstrumentedList の最初のインスタンスのクラスを取得することもできますが、InstrumentedList にオブジェクトがない場合、これは機能しません。

理由: マッパー クラス X のプロパティを含む Python 辞書を InstrumentedList に追加する必要がありますが、実行時にマッパー クラスがわかりません。辞書を追加できないため、マッパー クラスを取得する必要があります。

ありがとう。

4

1 に答える 1

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_

inspect のドキュメント - > 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_

于 2013-03-12T02:26:40.533 に答える