将python对象转换为列表列表
我正在尝试将sqlalchemy对象转换为列表列表: 我试过做:将python对象转换为列表列表,python,python-3.x,lambda,sqlalchemy,Python,Python 3.x,Lambda,Sqlalchemy,我正在尝试将sqlalchemy对象转换为列表列表: 我试过做: lambda q:[q.all()中obj的location.name] 它成功了 但当我想在列表中添加/追加另一个时,它会中断: lambda q:[(location.name,obj.name代表obj,location in q.all()] 这就是我想要的: lambda q:[ [location.name,str(对象流量)] 对于obj,在q.all()中的位置] 预期产出: [ ['location na
lambda q:[q.all()中obj的location.name]
它成功了
但当我想在列表中添加/追加另一个时,它会中断:
lambda q:[(location.name,obj.name代表obj,location in q.all()]
这就是我想要的:
lambda q:[
[location.name,str(对象流量)]
对于obj,在q.all()中的位置]
预期产出:
[
['location name','10.0'],
['another location','20.15']
]
更新:
qry = db.Session.query(db.Log, db.Location).\
filter(db.Log.location_id == db.Location.id).\
filter(db.Log.location_id == id)
helpers.write_csv_from_query(resp, qry, falcon.HTTP_200, header,
lambda q: [
[location.name, str(obj.flowrate)]
for obj,location in q.all()])
处理对象查询的函数:
def write_csv_from_query(resp, query, status, header, result_func):
"""Writes CSV response."""
csv_name = date_to_str(datetime.now()) + ".csv"
csv_header = ','.join(header) + "\n"
# csv_data = convert_to_csv(result_func(query))
csv_data = []
csv_data = result_func(query)
csv_data = ','.join(csv_data)
resp.status = status
resp.content_type = 'text/csv'
resp.set_header('Content-disposition', 'attachment; filename=' + csv_name)
resp.body = csv_header + csv_data
由于在第一个示例中,
location
与lambda分开显示(您的迭代变量称为obj
),因此我假设location
是某个外部变量(位于q
和lambda之外),您只需执行以下操作即可
lambda q: [(location.name, obj.name for obj in q.all()]
最后一个例子是:
lambda q: [[location.name, str(obj.flowrate)] for obj in q.all()]
或者,由于obj.name
似乎等同于location.name
(这是链接要点中注释掉的部分):
甚至(在链接表的情况下):
(我真的无法从你给出的公式中分辨出什么是正确的公式,但我猜这是其中之一。)
摘要:仅迭代一(1)个对象,并从该单个对象提取信息。在
lambda q:[(location.name,obj.name for obj,location In q.all()]
在location.name
之前的括号中没有结束括号回溯错误消息是什么?在第一个示例中,q.all()
迭代obj
(即每次都返回一个obj)。在第二个示例中,它现在迭代obj,location
:两个项目。这没有意义,除非您同时更改了q
。@KhalilAmmour-“'TypeError',['sequence item 0:expected str instance,list found'”)也许我没有完全解释我要实现的目标。这是函数的代码,也是进行API调用的文件,请注意注释行是有效的,但是代码看起来很难看,我正试图让它更像Python
lambda q: [[obj.name, str(obj.flowrate)] for obj in q.all()]
lambda q: [[obj.location.name, str(obj.flowrate)] for obj in q.all()]