我已经研究过这个话题,并决定在这里问,因为我似乎找不到任何东西。我将在下面解释:
上下文:带有客户端填写并发布到服务器的表单的 Flask 应用程序。表单输入用于创建查询和返回数据。
我目前正在使用 SQLalchemy 从头开始构建查询。至此,我已经成功连接到我现有的 Redshift 数据库并且可以正常查询,但我无法弄清楚如何Select x, y, z根据用户的表单输入动态构建一个简单的语句。
主要问题是Query()无法接收列的python 列表。似乎您必须指定每个列,例如table.c.column1哪些列不适用于动态查询,因为在用户提交表单之前我不知道我想要哪些列。
到目前为止我的 2 个想法:
Query.add_columns(table.c['colname'])select([col1, col2, ...])代替Query()load_columns()仅加载表中的特定列进行查询。不幸的是似乎只适用于模型对象而不适用于反射表,除非我弄错了这两者在我看来都是倒退的,因为它们并没有真正有效地实现我的目标。
SQLAlchemy 非常灵活,因此 1 和 2 都可以完成工作。如果您不需要 ORM 功能,那么也许#2 更自然。如果用户要传递列名称列表,例如
columns = request.args.getlist('columns')
Run Code Online (Sandbox Code Playgroud)
然后你可以select()使用一堆column()构造轻松地创建你的:
stmt = select([column(c) for c in columns]).\
select_from(some_table)
Run Code Online (Sandbox Code Playgroud)
或者如果您手头有桌子,就像您在问题中暗示的那样:
stmt = select([table.c[c] for c in columns])
Run Code Online (Sandbox Code Playgroud)
然后剩下的就是执行你的语句:
results = db.session.execute(stmt).fetchall()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2632 次 |
| 最近记录: |