在SQLAlchemy类中查找所有关联代理

时间:2017-01-16 08:04:41

标签: python sqlalchemy flask-sqlalchemy

我知道从类A(继承自db.Model)获取所有正确的SQLA列的简单方法 - 我可以在运行时执行A.__table__.columns。但是,A也有几个关联代理,我不知道一种优雅的方法来获取那些(除了只运行所有类的属性)。 有没有办法使用SQLA的检查呢?

我正在使用python 2.7和Flask-SQLAlchemy。

1 个答案:

答案 0 :(得分:2)

有一种方法可以使用runtime inspection API。有了它你甚至不需要戳A__table__的内部:

from sqlalchemy import inspect

inspect(A).columns

有关关联代理的列表,例如可以

from sqlalchemy.ext.associationproxy import ASSOCIATION_PROXY

proxies = [desc for desc in inspect(A).all_orm_descriptors
           if desc.extension_type is ASSOCIATION_PROXY]

all_orm_descriptorsInspectionAttr属性的集合,包括映射属性以及扩展声明的属性。要区分扩展和非扩展,请检查InspectionAttr.extension_type常量属性。