Python 在SQLALCHEMY中使用或从多个联接表中筛选属性会生成额外的实体

Python 在SQLALCHEMY中使用或从多个联接表中筛选属性会生成额外的实体,python,join,filter,sqlalchemy,flask-sqlalchemy,Python,Join,Filter,Sqlalchemy,Flask Sqlalchemy,如中所述,sqlalchemy“filter”和“filter_by”filters only是调用Query.join()的最后一个实体 我想要一个类似以下的查询: SELECT sale.* FROM sale JOIN sale_transactions ON sale.id = sale_transactions.sale_id JOIN customer ON customer.id = sale.customer_id JOIN product ON product.id = s

如中所述,sqlalchemy“filter”和“filter_by”filters only是调用Query.join()的最后一个实体

我想要一个类似以下的查询:

SELECT sale.*
FROM sale JOIN sale_transactions ON sale.id = sale_transactions.sale_id 
JOIN customer ON customer.id = sale.customer_id 
JOIN product ON product.id = sale_transactions.product_id
WHERE (sale.description LIKE '%something%' OR product.name LIKE '%something%' OR customer.name LIKE '%something%')
AND sale.date >= 'someDate' AND sale.date <= 'someOtherDate'
为此,我编写了以下代码:

query = Sale.query.join(Customer)
query = query.join(SaleTransactions, Product)
query = query.filter(Sale.description.like('%something%') | Product.name.like('%something%') | Customer.name.like('%something%'))
query = query.filter(Sale.date >= datetime.today(), Sale.date <= datetime.today())
query=Sale.query.join(客户)
query=query.join(销售交易、产品)
query=query.filter(Sale.description.like('%something%'))| Product.name.like('%something%'))| Customer.name.like('%something%'))
query=query.filter(Sale.date>=datetime.today(),Sale.date='someDate'和Sale.date
query = Sale.query.join(Customer)
query = query.join(SaleTransactions, Product)
query = query.filter(Sale.description.like('%something%') | Product.name.like('%something%') | Customer.name.like('%something%'))
query = query.filter(Sale.date >= datetime.today(), Sale.date <= datetime.today())
SELECT sale.*
FROM customer, sale JOIN sale_transactions ON sale.id = sale_transactions.sale_id 
JOIN customer ON customer.id = sale.customer_id 
JOIN product ON product.id = sale_transactions.product_id
WHERE (sale.description LIKE '%something%' OR product.name LIKE '%something%' OR customer.name LIKE '%something%')
AND sale.date >= 'someDate' AND sale.date <= 'someOtherDate'