我有一个网址https://example.com?p1=nai&p2=tex&p3=mak
我在mysql上使用了pony orm+flask。我想获取所有与url参数匹配的行。p1、p2和p3是表中的字段,可以根据用户输入而变化
在mysql中,我会做一些类似于done的事情[select*from table name where p1=nai&p2=tex]
在我的小马/ flask 代码下面
query = select(r for r in Route)
for key,value in args.items():
query = query.where("lambda r: r.%s == '%s'" %(key, value))
print(r.id)
我上面的查询只返回第一个参数的匹配。i、 如果p1=nai,那么它将返回p1=nai处的所有值,并忽略其余值。我错过了什么?注意:不要担心sql注入
3条答案
按热度按时间6yoyoihd1#
抬头
alexander的上述答案是正确的,但只会返回1个响应。您可能需要创建一个python数组并在查询结果中附加多个值。
hc8w905p2#
如果要按完全匹配筛选具有ponyorm的参数,可以将关键字参数指定为
filter
或者where
方法:对于更复杂的查询,可以使用
getattr
:我上面的查询只返回第一个参数的匹配。
我怀疑这是由代码中的某个bug引起的,也许您将新的查询分配给
query2
然后使用上一个query
而不是query2
.5vf7fwbs3#
您可以将请求参数与python的**kwargs功能一起使用。假设我们想在我们的用户数据库中寻找一个叫bob的人,他今年22岁:
您可以将请求参数转换为如下所示的字典:
然后可以使用kwargs查询我们的用户
这和:
它将把所有名为bob,年龄为22岁的用户放在一个列表中。
完全工作的代码段:
使用此查询:
http://127.0.0.1:5000/?name=bob&age=22
,将打印:但是,当它与无效的请求参数一起使用时,它会给您带来错误(
name=bob&age=22&country=russia)
所以你必须考虑到这一点。编辑:我完全错过了小马奥姆位,抱歉。我对此一无所知,但是如果您可以使用与sql alchemy中相同的方式进行查询(column1=value1,column2=value2,…),那么它也应该适用于这个示例。不管怎样,我还是把它留在这里,因为它对那些使用sql炼金术的人仍然有用。