我知道从类A(继承自db.Model)获取所有正确的SQLA列的简单方法 - 我可以在运行时执行A.__table__.columns
。但是,A也有几个关联代理,我不知道一种优雅的方法来获取那些(除了只运行所有类的属性)。
有没有办法使用SQLA的检查呢?
我正在使用python 2.7和Flask-SQLAlchemy。
答案 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_descriptors
是InspectionAttr
属性的集合,包括映射属性以及扩展声明的属性。要区分扩展和非扩展,请检查InspectionAttr.extension_type
常量属性。