Подтвердить что ты не робот

Как получить имена столбцов из результата SQLAlchemy (декларативный синтаксис)

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

conn.execute(query).keys()

Ответ 3

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()

Ответ 4

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

conn.execute(query)._metadata.keys