How to get column names from SQLAlchemy result (declarative syntax)
You can do something similar to Foo Stack's answer without resorting to private fields by doing:
conn.execute(query).keys()
from sqlalchemy.ext.declarative import declarative_basefrom 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)) ... ...
Then this will return the columns names ['id', 'date', 'value', ...]:
Project.__table__.columns.keys()
Or this
Project.metadata.tables['table1'].columns.keys()
The difference is between ORM and non-ORM, not declarative, which is just a helper for the ORM.
Query has a method column_descriptions()
that was added for this purpose::
http://www.sqlalchemy.org/docs/orm/query.html#sqlalchemy.orm.query.Query.column_descriptions
the example there seems like it has a typo, says q.columns
but it should be q.column_descriptions
(edit: just fixed it).