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