您可以将请求参数与 python 具有的 **kwargs 功能一起使用。假设我们想在我们的用户数据库中寻找一个叫 bob 的人,他是 22 岁:
http://127.0.0.1:5000/?name=bob&age=22
您可以将请求参数转换为字典,如下所示:
argumentdict = request.args.to_dict()
然后您可以使用 kwargs 查询我们的用户
users = User.query.filter_by(**argumentdict).all()
这与以下内容相同:
users = User.query.filter_by(name='bob', age='22').all()
然后将所有名称为 bob 且年龄为 22 的用户放在一个列表中。
完整的工作片段:
from flask import Flask, render_template, request, render_template_string
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
age = db.Column(db.Integer)
db.create_all()
for name, age in [['Bob', 45], ['John', 55], ['Bob', 22]]:
user = User()
user.name = name
user.age = age
db.session.add(user)
db.session.commit()
@app.route("/")
def index():
argumentdict = request.args.to_dict()
users = User.query.filter_by(**argumentdict).all()
print(users)
app.run()
使用此查询:http://127.0.0.1:5000/?name=bob&age=22
,将打印:
[<User 3>]
但是,当将其与无效的请求参数 ( 一起使用时,它会给您带来错误name=bob&age=22&country=russia)
,因此您必须考虑到这一点。
编辑:我完全错过了 PONY ORM 位,对此感到抱歉。我对此一无所知,但如果您可以使用与 SQL-Alchemy 中相同的方式进行查询 (column1=value1, column2=value2, ...),那么它也应该适用于这个示例。无论如何我都会把它留在这里,因为它对那些使用 SQL-Alchemy 的人仍然有用。