返回

如何在 Python Web 开发中读取数据库数据

后端

一、获取全部记录

1.1 增加客户

现在我们来实现一个功能:浏览器访问 sales/customers/,我们的服务端就返回系统中所有客户的信息。

@app.route('/sales/customers/')
def get_customers():
    customers = Customer.query.all()
    return jsonify({'customers': [c.to_dict() for c in customers]})

这段代码首先使用 Customer.query.all() 方法获取所有客户信息,然后使用列表推导将每个客户对象转换为字典,最后使用 jsonify() 方法将字典列表转换为 JSON 字符串返回给客户端。

1.2 查询产品

同样,我们可以使用同样的方式来获取所有产品信息:

@app.route('/sales/products/')
def get_products():
    products = Product.query.all()
    return jsonify({'products': [p.to_dict() for p in products]})

二、过滤记录

2.1 按客户名称过滤

我们也可以根据客户名称来过滤客户信息,例如,我们希望获取所有名称包含 "张" 的客户信息:

@app.route('/sales/customers/<name>')
def get_customers_by_name(name):
    customers = Customer.query.filter(Customer.name.contains(name)).all()
    return jsonify({'customers': [c.to_dict() for c in customers]})

这段代码首先使用 Customer.query.filter() 方法根据客户名称进行过滤,然后使用 all() 方法获取所有过滤后的客户信息,最后使用列表推导将每个客户对象转换为字典,并使用 jsonify() 方法将字典列表转换为 JSON 字符串返回给客户端。

2.2 按产品价格过滤

同样,我们可以根据产品价格来过滤产品信息,例如,我们希望获取所有价格大于 100 元的产品信息:

@app.route('/sales/products/<price>')
def get_products_by_price(price):
    products = Product.query.filter(Product.price > price).all()
    return jsonify({'products': [p.to_dict() for p in products]})

三、排序记录

3.1 按客户名称排序

我们可以根据客户名称对客户信息进行排序,例如,我们希望按照客户名称的升序排列来获取所有客户信息:

@app.route('/sales/customers/sort_by_name')
def get_customers_sorted_by_name():
    customers = Customer.query.order_by(Customer.name.asc()).all()
    return jsonify({'customers': [c.to_dict() for c in customers]})

这段代码首先使用 Customer.query.order_by() 方法根据客户名称进行排序,然后使用 all() 方法获取所有排序后的客户信息,最后使用列表推导将每个客户对象转换为字典,并使用 jsonify() 方法将字典列表转换为 JSON 字符串返回给客户端。

3.2 按产品价格排序

同样,我们可以根据产品价格对产品信息进行排序,例如,我们希望按照产品价格的降序排列来获取所有产品信息:

@app.route('/sales/products/sort_by_price')
def get_products_sorted_by_price():
    products = Product.query.order_by(Product.price.desc()).all()
    return jsonify({'products': [p.to_dict() for p in products]})

四、分页记录

4.1 分页获取客户

我们可以对客户信息进行分页,例如,我们希望每页显示 10 条客户信息,并获取第一页的客户信息:

@app.route('/sales/customers/page/<int:page>')
def get_customers_by_page(page):
    customers = Customer.query.paginate(page, 10, False)
    return jsonify({'customers': [c.to_dict() for c in customers.items], 'total': customers.total})

这段代码首先使用 Customer.query.paginate() 方法对客户信息进行分页,然后使用 all() 方法获取当前页的客户信息,最后使用列表推导将每个客户对象转换为字典,并使用 jsonify() 方法将字典列表转换为 JSON 字符串返回给客户端。

4.2 分页获取产品

同样,我们可以对产品信息进行分页,例如,我们希望每页显示 20 条产品信息,并获取第二页的产品信息:

@app.route('/sales/products/page/<int:page>')
def get_products_by_page(page):
    products = Product.query.paginate(page, 20, False)
    return jsonify({'products': [p.to_dict() for p in products.items], 'total': products.total})

总结

在这篇文章中,我们介绍了如何在 Python Web 开发中使用 Flask 和 SQLAlchemy 来读取数据库数据,包括如何获取全部记录、过滤记录、排序记录和分页记录等操作。这些操作对于构建一个完整的 Web 应用是非常重要的,希望这篇文章能够帮助您更好地理解和使用这些操作。