如何从SQLAlchemy映射对象中发现表属性
我有一个类,它和一个表对应,在我的情况下是用声明的方式来做的。我想从这个类中“发现”表的属性、列、名称和关系:
engine = create_engine('sqlite:///' + databasePath, echo=True)
# setting up root class for declarative declaration
Base = declarative_base(bind=engine)
class Ship(Base):
__tablename__ = 'ships'
id = Column(Integer, primary_key=True)
name = Column(String(255))
def __init__(self, name):
self.name = name
def __repr__(self):
return "<Ship('%s')>" % (self.name)
所以现在我的目标是从“Ship”这个类中获取表的列和它们的属性,想从其他代码中做到这一点。我想我可以用一些工具来处理,但SQLAlchemy的API有没有提供什么方法呢?
2 个回答
0
如果没有使用声明式基础,这个答案就不成立。无论如何初始化,下面的内容都应该能正常工作。
对于类对象:
TableClass.sa_class_manager.mapper.mapped_table.name
对于实例对象:
tableObj.sa_instance_state.mapper.mapped_table.name
62
你可以从 Table 对象获取你需要的信息:
Ship.__table__.columns
会告诉你关于列的信息Ship.__table__.foreign_keys
会列出外键Ship.__table__.constraints
和Ship.__table__.indexes
是其他你可能觉得有用的属性