猿问

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

大家好,我是 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并从与此“产品名称”相关的另一个表(供应商、销售、客户)中获取其他记录。


那我该怎么做呢?


暮色呼如
浏览 133回答 1
1回答

慕慕森

这是一段基于一组“动态”过滤器运行查询的代码。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)
随时随地看视频慕课网APP

相关分类

Python
我要回答