gpt4 book ai didi

python - 将 JSON 对象转换为可用的 sqlalchemy 过滤语句

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:49 25 4
gpt4 key购买 nike

从 flask 组件我请求调用:

request_json = request.get_json() 

这是一个包含以下内容的 JSON 对象:

{'filter1' : '123', 'filter2' : '456', 'filter3' : '789' }

此外,这些过滤器的大小可能因前端用户而异。它可以只是一个或多个过滤器。

我想知道您如何将这样的对象转换为可用的查询?我相信 or_()and_() 是我需要用来构建过滤器的东西。是否可以做一些诸如...

query.filter_by(and_(*request_json))

我对整个技术堆栈非常陌生...任何帮助将不胜感激!

最佳答案

filter_by 采用关键字参数来执行基本的相等性过滤器。删除 and_ 并将 dict 直接拼写成 filter_by

query.filter_by(**request_json)

但是,这不会对键或值进行验证。所以如果有人传入了'fish': 3而没有"fish"列,或者传入了'column4': 'abc'而column4其实是一个数组类型,你会得到一个错误。

因此,手动验证和过滤可能更安全、更直接。

query = MyModel.query

if 'column1' in data:
try:
value = int(data['column1'])
except (TypeError, ValueError):
pass
else:
query = query.filter(MyModel.column1 == value)

if 'column2' in data:
try:
value = datetime.utcfromtimestamp(int(data['column2']))
except (TypeError, ValueError):
pass
else:
query = query.filter(MyModel.column2 >= value)

# etc.

return query

关于python - 将 JSON 对象转换为可用的 sqlalchemy 过滤语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29285040/

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