我只是尝试查看对象的查询集,并写入csv导出:
@expose('/csv-export')
def csv_export(self):
batch_num = request.args.get('batch_num')
if not batch_num:
flash('Invalid batch id', 'danger')
abort(404)
si = io.StringIO()
cw = csv.writer(si)
# array
my_objects = MyObject.query.filter_by(batch_num=batch_num).all()
row_headers = my_objects[0].serialize()
cw.writerow(row_headers)
object_rows = []
for my_object in my_objects:
for k, v in vars(my_object).items():
object_rows.append(v)
cw.writerows(object_rows)
output = make_response(si.getvalue())
output.headers["Content-Disposition"] = "attachment; filename=export.csv"
output.headers["Content-type"] = "text/csv"
return output如果我检查object_rows是什么,它看起来像这样:
[<sqlalchemy.orm.state.InstanceState object at 0x7f92a791a390>, 2, None, '3312363552684', 551, None, '24daae41-82f5-42bf-b12f-9762554ee394', <sqlalchemy.orm.state.InstanceState object at 0x7f92a791a588>, ]我做错了什么?
发布于 2018-07-27 06:23:05
for my_object in my_objects:
for k, v in vars(my_object).items():
object_rows.append(v)SQLAlchemy在SQLAlchemy内部使用的一个名为_sa_instance_state的仪表化对象的每个实例上创建一个属性。当您使用vars()遍历对象的__dict__时,这个键/值对将与所有其他属性键/值一起遍历。
因此,解决方案是将其过滤掉。一种常见的方法是根据键是否以前导下划线开头过滤掉键,例如:
for my_object in my_objects:
for k, v in vars(my_object).items():
if not k.startswith(‘_’):
object_rows.append(v)这将过滤掉所有私有属性,但如果有其他私有属性值需要捕获,则可以更具体地进行过滤。
https://stackoverflow.com/questions/51546624
复制相似问题