gpt4 book ai didi

python - 在 SqlAlchemy 中创建动态选择查询

转载 作者:太空狗 更新时间:2023-10-30 02:54:15 26 4
gpt4 key购买 nike

我已经研究了这个话题,并决定只在这里提问,因为我似乎找不到任何东西。我将在下面解释:

上下文:Flask 应用程序带有客户端填写并发送到服务器的表单。表单输入用于创建查询和返回数据。

我目前正在使用 SQLalchemy 从头开始​​构建查询。此时,我已成功连接到我现有的 Redshift 数据库并可以正确查询,但我不知道如何根据用户的表单输入动态构造一个简单的 Select x, y, z 语句。

主要问题是 Query() 无法接受 python 列列表。似乎您必须指定每一列,例如 table.c.column1,这不适用于动态查询,因为在用户提交表单之前我不知道我想要什么列。

到目前为止我的 2 个想法:

  1. 遍历所有列名并使用 Query.add_columns(table.c['colname'])
  2. 使用 select([col1, col2, ...]) 代替 Query()
  3. 使用 load_columns() 仅加载表中的特定列以进行查询。不幸的是,除非我弄错了,否则似乎只适用于模型对象而不适用于反射表

这两个对我来说似乎都是倒退的,因为它们并没有真正有效地实现我的目标。

最佳答案

SQLAlchemy 非常灵活,因此 1 和 2 都可以完成工作。如果您不需要 ORM 功能,那么 #2 可能更自然。如果用户要传递列名列表,例如

columns = request.args.getlist('columns')

然后你可以用一堆 column() 很容易地创建你的 select()构造:

stmt = select([column(c) for c in columns]).\
select_from(some_table)

或者如果您手头有 table ,就像您在问题中暗示的那样:

stmt = select([table.c[c] for c in columns])

然后剩下的就是执行你的语句:

results = db.session.execute(stmt).fetchall()

关于python - 在 SqlAlchemy 中创建动态选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46598276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com