Dom*_*icM 3 python sql sqlite sqlalchemy python-2.7
我正在使用SQLAlchemy查询sqlite数据库,如下所示:
import db
...
results = session.query(table).all()
for result in results:
print result
print "how to print column name?"
Run Code Online (Sandbox Code Playgroud)
这是db类的片段:
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
Run Code Online (Sandbox Code Playgroud)
尝试根据文档抛出的结果对结果使用“ .column_descriptions”时出现“'list'对象没有属性'column_descriptions'”错误。
动态获取列名和值的正确方法是什么?我想要这个,所以我可以构建一个函数来处理所有查询的json转换,而不是到处重复代码。
您可以用来 在代码中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
Run Code Online (Sandbox Code Playgroud)
您也可以使用select
语法。
编辑2:
这是一篇关于字典理解的文章
好的,这个字典的理解是将键作为列名,并将值作为我查询的示例行中对应列的值。
您想要打印list
,因此我们可以这样操作:
以此替换词典理解行。
print([getattr(sample_row, name) for name in col_names])
Run Code Online (Sandbox Code Playgroud)
这将在列表中打印该行的值,但是您没有得到列名。
但是为此,您可以创建一个元组列表。
print([(name, getattr(sample_row, name)) for name in col_names])
Run Code Online (Sandbox Code Playgroud)
但是,执行此操作的一种更简单的方法可能是使用SQLAlchemy提供的select语法。
此处的文档:http : //docs.sqlalchemy.org/en/rel_0_9/core/tutorial.html#selecting
归档时间: |
|
查看次数: |
6262 次 |
最近记录: |