我有四个通过外键关联的表。 DriverStop
是 DriverDailyRoute
和 Agency
的子级。 DriverDailyRoute
是 User
的子级(在我的关系中也称为 driver
)。我想将所有这些数据平铺到一张表中,以便可以将其导出到 Excel。我在做这件事时遇到了麻烦。下面的代码有效。
@app.route('/admin/dumpdb')
@admin_filter
def admin_dump_db():
query = model.DriverStop.query.join(model.DriverDailyRoute, model.Agency).join(model.User).all()
print(query[0].route.driver.username)
cols = ['dairy']
return excel.make_response_from_query_sets(query, cols, "xls")
在本例中,dairy 是 DriverStop
表中的一列。但是如何访问 DriverDailyRoute
或 User
表中的列?我尝试将 cols 更改为 cols = ['route.driver.first_name']
但这会出现错误。我该如何解决这个问题?
还有没有办法更改 Excel 文件中列的显示名称,例如 cols=[('Dairy Collected', 'dairy')]
?
最佳答案
您可以使用 with_entities() 方法解决这个问题。 尝试像这样更改查询:
query = model.DriverStop.query.with_entities(DriverStop.id, DriverDailyRoute.name, User.first_name).join(model.DriverDailyRoute, model.Agency).join(model.User).all()
在 with_entities 方法中,您可以列出要导出到 Excel 的所有列。 当然,在上面的查询中,我假设您的模型具有以下属性:
- DriverStop - id 属性,
- DriverDailyRoute - 名称属性和
- 用户 - 名字属性
当然,您必须仅使用模型具有的属性。
你的 cols 变量应该如下所示:
cols = ['id', 'name', 'first_name']
关于python - 如何使用 Flask 和 SQLAlchemy 输出扁平化数据库表以实现出色表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832557/