如何从SQLAlchemy结果中获取列名(声明式语法)
我正在做一个Pyramid项目,里面有一个用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()
我该如何从这个结果中获取列名呢?
补充说明:我不能使用这个方法,因为我使用的是声明式语法。
9 个回答
79
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()
85
你可以像Foo Stack的回答那样做,而不需要使用私有字段,方法是:
conn.execute(query).keys()
39
这里的区别在于ORM和非ORM,而不是声明式的,声明式只是ORM的一个辅助工具。
查询中有一个属性叫做 column_descriptions
,是为了这个目的而添加的:
https://docs.sqlalchemy.org/en/20/orm/queryguide/query.html#sqlalchemy.orm.Query.column_descriptions