Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从SQLAlchemy模型确定子对象的类型?_Python_Sqlalchemy - Fatal编程技术网

Python 如何从SQLAlchemy模型确定子对象的类型?

Python 如何从SQLAlchemy模型确定子对象的类型?,python,sqlalchemy,Python,Sqlalchemy,我有以下SQLAlchemy模型: class PersonConsent(ModelAbstract): __tablename__ = "personConsent" id = db.Column(db.Integer, primary_key=True) patientId = db.Column(db.Integer, db.ForeignKey("person.id")) authorizedPersonId = db.Column(db.Integer

我有以下SQLAlchemy模型:

class PersonConsent(ModelAbstract):
    __tablename__ = "personConsent"
    id = db.Column(db.Integer, primary_key=True)
    patientId = db.Column(db.Integer, db.ForeignKey("person.id"))
    authorizedPersonId = db.Column(db.Integer, db.ForeignKey("person.id"))
    attachmentId = db.Column(db.Integer)

    # Additional models
    authorizedPerson = db.relationship("Person", foreign_keys=[authorizedPersonId])
    consents = db.relationship("PersonConsentType", 
                secondary=personConsentToTypeMap,
                primaryjoin=id==personConsentToTypeMap.c.consentId,
                secondaryjoin=PersonConsentType.id==personConsentToTypeMap.c.consentTypeId)
仅考虑个人同意模型,如何确定构成
同意
字段的项目模型?

比如说


type(PersonConsent.approves)==PersonConsentType

使用
inspect
功能并遵循正确的属性获取关系的目标模型

from sqlalchemy import inspect

mapper = inspect(PersonConsent)
property = mapper.relationships['consents']
target = property.mapper.class_

assert target is PersonConsentType

从技术上讲,您可以通过执行
PersonConsent.approves.property.mapper.class.
来实现这一点,但它不太通用。例如,您可以使用上面的检查来循环所有关系,即使您不知道它们的名称。

使用
inspect
函数并遵循正确的属性来获取关系的目标模型

from sqlalchemy import inspect

mapper = inspect(PersonConsent)
property = mapper.relationships['consents']
target = property.mapper.class_

assert target is PersonConsentType
从技术上讲,您可以通过执行
PersonConsent.approves.property.mapper.class.
来实现这一点,但它不太通用。例如,您可以使用上面的检查来循环所有关系,即使您不知道它们的名称