【发布时间】:2017-08-15 18:39:54
【问题描述】:
背景
当我想创建一个字典来将列名映射到结果中的值时,我需要单独列出每一列
result = self.session.query(Project)\
.join(Deadline)\
.values(Project.project_id, Project.project_name,
Project.project_root, Deadline.deadline_time)
output = []
for row in result:
r = {}
r['project_id'] = row.project_id
r['project_name'] = row.project_name
r['project_root'] = row.project_root
r['deadline_time'] = row.deadline_time
output.append(r)
return output
模型是 ORM 映射的,不是 SQLAlchemy 核心。
class Deadline(Base):
__tablename__ = 'deadline'
deadline_id = Column(Integer, primary_key = True)
deadline_time = Column(String, nullable = False)
class Project(Base):
__tablename__ = 'project'
project_id = Column(Integer, primary_key = True)
project_name = Column(String, nullable = False)
project_root = Column(String, nullable = False)
deadline_id = Column(Integer, ForeignKey("deadline.deadline_id"), nullable=False)
deadline = relationship("Deadline", primaryjoin = "Project.deadline_id == Deadline.deadline_id", backref=backref("project", uselist=False))
问题
这对于包含许多列的表来说效率不高,我也不能对其他表重复使用相同的代码。
我尝试了以下但无法获取列名
column_names = [c["name"] for c in result.column_descriptions]
return [dict(zip(column_names, row)) for row in result.all()]
result.__table__.columns.keys()
编辑 1
关于converting SQLAlchemy result into dict 有几个类似的问题。根据上面的代码,result.__table__.columns.keys() 不适用于 ORM 映射模型。
【问题讨论】:
标签: python orm sqlalchemy flask-sqlalchemy