我正在使用库存数据库并尝试使用 flask 制作 REST api。
我希望能够访问像 http://myapp.com/products 这样的 url,它返回数据库中所有产品的 JSON。我还希望有一个产品 id 的可选参数,例如 http://myapp.com/products/%7Bid%7D 并返回与传递给它的 id 匹配的产品。相当标准的东西。
我的问题是关于根据用户是否将 id 传递给 url 来生成 sql 查询字符串的最佳方法。
我拥有的又快又脏的是:
# Products
@app.route('/products/<int:id>/', methods=['GET', 'POST'])
@app.route('/products', defaults={'id' : 0}, methods=['GET', 'POST'])
def products(id):
products = []
if(id != 0):
cur.execute("""SELECT stuff
FROM products
WHERE products.id = %s""", (id,))
else:
cur.execute("""SELECT stuff
FROM products""")
这可行,但感觉不对,特别是当我的“东西”查询是一个很大的长查询并且每个条件重复两次,减去 WHERE id = %.
根据用户是否将 id 传递给 url,生成这些查询的更好方法是什么?
回答1
默认情况下,如果 URL 中没有添加任何产品 ID,Flask 将抛出错误,因为 products 函数需要一个 id。
我建议使用 Flask-SQLAlechemy,它是一个 ORM。简短的介绍:
它提供了一整套众所周知的企业级持久性模式,专为高效和高性能的数据库访问而设计,适用于简单的 Python 领域语言。
使用 SQLAlchemy,您的查询将如下所示:
if(id !=0):
Products.query.filter_by(id=id).first()
else
Products.query.all()