62

私はピラミッドプロジェクトで作業しており、宣言構文でSQLAlchemyのテーブルを持っています

"""models.py"""
class Projects(Base):
    __tablename__ = 'projects'
    __table_args__ = {'autoload': True}

を使用して結果を取得します

""""views.py"""
session = DBSession()
row_data = session.query(Projects).filter_by(id=1).one()

この結果から列名を取得するにはどうすればよいですか。

PS:宣言構文を使用しているため、このメソッドを使用できません。

4

8 に答える 8

66

次のようにして、プライベート フィールドに頼らずに Foo Stack の回答に似たことができます。

conn.execute(query).keys()
于 2015-07-30T21:45:51.350 に答える
60
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import (Column, Index, Date, DateTime, Numeric, BigInteger, String, ForeignKey, Boolean)

Base = declarative_base()

class Project(Base):
    """sqlalchemy ORM for my table."""
    __tablename__ = "table1"
    id = Column("id", BigIntegerID, primary_key=True, autoincrement=True)
    date = Column("date", Date, nullable=False)
    value = Column("value", Numeric(20, 8))
    ...
    ...

次に、列名 ['id', 'date', 'value', ...] を返します。

Project.__table__.columns.keys()

またはこれ

Project.metadata.tables['table1'].columns.keys()
于 2015-12-03T20:36:31.303 に答える
36

違いは、ORM と非 ORM の違いであり、宣言型ではなく、ORM の単なるヘルパーです。

クエリには、column_descriptions()この目的のために追加されたメソッドがあります::

http://www.sqlalchemy.org/docs/orm/query.html#sqlalchemy.orm.query.Query.column_descriptions

そこの例にはタイプミスがあるようですが、そうあるq.columnsべきですq.column_descriptions(編集:修正しました)。

于 2011-06-23T15:12:35.460 に答える
12

ちょっと遊んでみると、この構文はすべての列を提供します (問題を解決するには、クエリを 1 つのテーブル/オブジェクトのみを参照するように設定します)。

conn.execute(query)._metadata.keys
于 2013-06-27T21:26:12.643 に答える