Flask API MySQL queries



我正在玩一个库存数据库,并试图用flask制作一个REST api。

我希望能够击中一个url,如http://myapp.com/products,它返回JSON的所有的产品在数据库中。我还希望有一个产品id的可选参数,如http://myapp.com/products/{id},并返回与传递给它的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""")

这是有效的,但感觉不对,特别是当我的"东西";query是一个很长的查询,每个条件重复两次,减去WHERE id = %。

根据用户是否向url传递id来生成这些查询的更好方法是什么?

默认情况下,如果没有任何产品ID添加到URL中,Flask将抛出一个错误,因为products函数需要一个ID。

我建议使用Flask-SQLAlechemy,这是一个ORM。简短描述:

它提供了一套完整的企业级持久性模式是为高效和高性能的数据库访问而设计的,

使用SQLAlchemy,您的查询看起来像:

if(id !=0):
Products.query.filter_by(id=id).first()
else
Products.query.all()

SQLACHEMY文档

Flask-SQLAlchemy文档

最新更新