Как получить имена столбцов из результата SQLAlchemy (декларативный синтаксис) - PullRequest
29 голосов
/ 23 июня 2011

Я работаю в проекте пирамиды, и у меня есть таблица в 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 ]

44 голосов
/ 31 июля 2015

Вы можете сделать что-то похожее на ответ Foo Stack, не прибегая к закрытым полям, выполнив:

conn.execute(query).keys()
25 голосов
/ 03 декабря 2015
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()
25 голосов
/ 23 июня 2011

Разница между ORM и не-ORM, а не декларативным, который является просто помощником для ORM.

В запросе есть метод column_descriptions(), который был добавлен для этой цели ::

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

пример там, похоже, имеет опечатку, говорит q.columns, но это должно быть q.column_descriptions (редактировать: только что исправил).

7 голосов
/ 28 июня 2013

Просто поэкспериментируя, этот синтаксис даст вам все столбцы (поэтому, чтобы решить вашу проблему, задайте запрос для просмотра только одной таблицы / объекта):

conn.execute(query)._metadata.keys
...