33

私の場合、宣言的な方法でテーブルにマップされたクラスがあり、このクラスからテーブルのプロパティ、列、名前、関係を「発見」したいと思います。

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によって提供される方法はありますか?

4

2 に答える 2

63

Tableオブジェクトから取得できる必要な情報:

  • Ship.__table__.columns列情報を提供します
  • Ship.__table__.foreign_keys外部キーを一覧表示します
  • Ship.__table__.constraintsShip.__table__.indexesあなたが役に立つと思うかもしれない他のプロパティです
于 2010-03-15T16:58:44.020 に答える
0

宣言型ベースが使用されていない場合、答えは失敗します。以下は、どのように初期化されても機能するはずです

クラスオブジェクトの場合:

TableClass.sa_class_manager.mapper.mapped_table.name

インスタンスオブジェクトの場合:

tableObj.sa_instance_state.mapper.mapped_table.name
于 2020-10-13T07:01:55.607 に答える