Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Flask和SQLAlchemy将扁平数据库表输出到excel_Python_Flask_Sqlalchemy - Fatal编程技术网

Python 如何使用Flask和SQLAlchemy将扁平数据库表输出到excel

Python 如何使用Flask和SQLAlchemy将扁平数据库表输出到excel,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我有四个通过外键关联的表DriverStop是DriverDailyRoute和机构的子级DriverDailyRoute是User(在我的关系中也称为driver)的子级。我想将所有这些数据展平到一个表中,以便将其导出到excel。我做这件事有困难。下面的代码有效 @app.route('/admin/dumpdb') @admin_filter def admin_dump_db(): query = model.DriverStop.query.join(model.DriverD

我有四个通过外键关联的表
DriverStop
DriverDailyRoute
机构的子级
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\u 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()
cols = ['id', 'name', 'first_name']
在with_entities方法中,可以列出要导出到excel的所有列。 当然,在上面的查询中,我假设您的模型具有以下属性:

  • DriverStop-id属性
  • DriverDailyRoute-名称属性和
  • 用户名属性
当然,您必须只使用模型具有的属性

您的cols变量应该如下所示:

query = model.DriverStop.query.with_entities(DriverStop.id, DriverDailyRoute.name, User.first_name).join(model.DriverDailyRoute, model.Agency).join(model.User).all()
cols = ['id', 'name', 'first_name']

谢谢,对OP来说太晚了,不是对我:)