sql - Flask API MySQL 查询

我正在使用库存数据库并尝试使用 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()

https://www.sqlalchemy.org/

https://flask-sqlalchemy.palletsprojects.com/en/2.x/

相似文章