关于python:在sqlacalchemy类中查找所有关联代理

Finding all association proxies in a SQLAlchemy class

我知道一种从类A(从db.model继承)中获取所有正确的sqla列的简单方法——我可以在运行时执行A.__table__.columns。但是,A也有几个关联代理,我不知道如何获得这些代理的列表(不仅仅是在类的所有属性上运行)。有没有可能用sqla的inspect检查这个?

我使用的是python2.7和flask sqlachemy。


有一种使用运行时检查API的方法。有了它,你甚至不需要通过__table__戳入A的内部:

1
2
3
from sqlalchemy import inspect

inspect(A).columns

例如,对于关联代理的列表,可以执行以下操作

1
2
3
4
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常量属性。