我正在使用SQLAlchemy查询sqlite db,如下所示:
import db
...
results = session.query(table).all()
for result in results:
print result
print "how to print column name?"
以下是db class的一个片段:
class Device(Base):
__tablename__ = "devices"
name = Column(String(250), primary_key=True)
location = Column(String(250), nullable=False)
def __init__(self, name, location):
self.name = name
self.location = location
尝试使用" .column_descriptions"根据文件投掷的结果"' list'对象没有属性' column_descriptions'"错误。
使用值动态获取列名的正确方法是什么?我想要这个,所以我可以构建一个函数来处理所有查询的json转换,而不是遍布整个地方重复代码。
答案 0 :(得分:4)
您可以使用Device.__table__.columns
获取代码中Device
模型中的列列表。这些是Column
个对象,您可以在迭代时使用.name
来获取名称。然后,当您查询时,您可以使用getattr
或其他东西来获取所需的值。
修改强>
示例:
col_names = Device.__table__.columns.keys() # This gets the column names
sample_row = Device.query.first() # I just query for a random row
required_values = {name: getattr(sample_row, name) for name in col_names}
# This is a dictionary comprehension
您也可以使用select
语法。
EDIT2:
的文章好的,这个词典理解的作用是它将键作为列的名称,并将值作为我查询的样本行中相应列的值。
您想要打印list
,所以我们可以这样做:
用这个替换词典理解线。
print([getattr(sample_row, name) for name in col_names])
这将打印列表中该行的值,但您无法获取列名称。
但为此你可以创建一个元组列表。
print([(name, getattr(sample_row, name)) for name in col_names])
但是,更简单的方法是使用SQLAlchemy提供的select语法。
文档:http://docs.sqlalchemy.org/en/rel_0_9/core/tutorial.html#selecting