为了账号安全,请及时绑定邮箱和手机立即绑定

如何从sqlalchemy中的连接表中过滤?

如何从sqlalchemy中的连接表中过滤?

暮色呼如 2022-12-20 12:04:38
大家好,我是 sqlalchemy 的新手,我尝试通过以下代码从用户输入的任何字段中搜索模块。    filters = []    if 'inputVendorName' in inputfield:        filters.append(Vendors.vendor_name.contains(inputfield['inputVendorName']))    if 'inputProductName' in inputfield:        filters.append(Product.product_name.contains(inputfield['inputProductName']))    if 'inputCustomerName' in inputfield:        filters.append(Customers.customer_name.contains(inputfield['inputCustomerName']))    if 'inputSalePrice' in inputfield:        filters.append(Sales.price.contains(inputfield['inputSalePrice']))    # jointable --> how to join table    results = jointable.query.filter(db.or_(*filters)).all()开头fiters是一个列表,其中包含来自用户的任何输入值,我想在列表中使用这些值来从我的连接表中进行过滤。例如,用户输入了一些product_name,我想用它product_name来过滤并获取Products表中匹配的任何记录值,product_name并从与此“产品名称”相关的另一个表(供应商、销售、客户)中获取其他记录。那我该怎么做呢?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

这是一段基于一组“动态”过滤器运行查询的代码。


filters = []


# this is an example: 

inputfield = {

    "inputVendorName": "J", 

    "inputProductName": "Pen", 

    "MinPrice": 10

}


if 'inputVendorName' in inputfield:

    filters.append(Vendor.vendor_name.contains(inputfield["inputVendorName"]))


if  'inputProductName' in inputfield:

    filters.append(Product.product_name.contains(inputfield["inputProductName"]))


if 'MinPrice' in inputfield:

    filters.append(Sale.price > inputfield["MinPrice"])


base_query = session.query(Customer, Product, Vendor, Sale).filter(

    Sale.customer_id == Customer.customer_id, Vendor.vendor_id == Product.vendor_id, Sale.product_id == Product.product_id)


for res in base_query.filter(*filters).all(): 

    print(res)


查看完整回答
反对 回复 2022-12-20
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信