You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-SQLAlchemy查询在生产与开发环境中不一致问题求助

Flask + Flask-SQLAlchemy 实现多条件库存搜索

嘿,我之前做过类似的小型库存管理Web应用,这种带可选条件的搜索需求用Flask-SQLAlchemy来实现非常顺手,不用硬写一堆冗余的if-else拼接SQL,靠动态构建查询就能轻松搞定。下面是具体的实现方案:

第一步:定义库存模型

首先得把SQLite对应的模型类写好,假设你的硬件库存包含这些核心字段:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///inventory.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

class Hardware(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    hardware_name = db.Column(db.String(100), nullable=False)  # 硬件名称
    status = db.Column(db.String(20), nullable=False)  # 状态:Available/In Use/Repair等
    assigned_person = db.Column(db.String(50))  # 分配对象,比如Person X
    project = db.Column(db.String(50))  # 所属项目,比如Project ABC

第二步:编写动态搜索函数

核心思路就是从请求里提取可选条件,逐个叠加到查询上,替代你提到的循环遍历逻辑,代码更简洁易维护:

@app.route('/inventory/search', methods=['GET'])
def search_inventory():
    # 从GET请求参数中获取可选条件,未传参则为None
    target_status = request.args.get('status')
    target_person = request.args.get('assigned_to')
    target_project = request.args.get('project')
    # 可选扩展:支持硬件名称模糊搜索
    name_keyword = request.args.get('name')

    # 初始化查询:获取所有硬件记录
    query = Hardware.query

    # 动态叠加过滤条件
    if target_status:
        query = query.filter(Hardware.status == target_status)
    if target_person:
        query = query.filter(Hardware.assigned_person == target_person)
    if target_project:
        query = query.filter(Hardware.project == target_project)
    if name_keyword:
        # 模糊匹配名称,包含关键词的硬件都会被筛选出来
        query = query.filter(Hardware.hardware_name.like(f'%{name_keyword}%'))

    # 执行查询并获取结果
    matching_hardware = query.all()

    # 将结果转为JSON返回(也可以渲染模板展示到前端页面)
    return jsonify([{
        'id': hw.id,
        'name': hw.hardware_name,
        'status': hw.status,
        'assigned_to': hw.assigned_person,
        'project': hw.project
    } for hw in matching_hardware])

第三步:使用搜索接口的示例

用户可以通过组合URL参数实现各种条件搜索:

  • 查找分配给Person X的所有硬件:/inventory/search?assigned_to=Person+X
  • 查找Project ABC中状态为Available的所有硬件:/inventory/search?project=Project+ABC&status=Available
  • 查找名称包含"Laptop"且状态为In Use的硬件:/inventory/search?name=Laptop&status=In+Use

这种实现方式的优势

  • 安全可靠:SQLAlchemy会自动处理SQL注入风险,无需手动拼接SQL字符串
  • 灵活扩展:任意组合条件都能支持,新增过滤条件只需加一行if判断
  • 易于维护:逻辑清晰直观,不用为每一种条件组合编写单独的查询逻辑

内容的提问来源于stack exchange,提问作者Mark Edmondson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:14:58