如何从SQLAlchemy映射对象中发现表属性

32 投票
2 回答
23918 浏览
提问于 2025-04-15 20:24

我有一个类,它和一个表对应,在我的情况下是用声明的方式来做的。我想从这个类中“发现”表的属性、列、名称和关系:

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__.constraintsShip.__table__.indexes 是其他你可能觉得有用的属性

撰写回答