我有一个 URL 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]
在我的 PONY/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)
我上面的查询只返回第一个参数的匹配项。即如果 p1 = nai 那么它将返回所有 p1 = nai 并忽略其余部分。我错过了什么?注意:不要担心 SQL 注入(inject)
最佳答案
如果你想使用 PonyORM 通过精确匹配来过滤参数,你可以为 filter
或 where
方法指定关键字参数:
kwargs = {'name': 'John', 'age': 20}
query = Route.select().where(**kwargs)
对于更复杂的查询,可以使用 getattr
:
for name, value in kwargs.items():
query = query.where(lambda r: getattr(r, name) == value)
My query above just returns a match for the first parameter.
我怀疑这是由您的代码中的某些错误引起的,也许您将新查询分配给 query2
然后使用以前的 query
而不是 query2
.
关于Python/PonyORM/MySQL - 使用多个 URL 参数进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924356/