sqlalchemy sql组合

2024-10-04 01:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个广泛使用sqlalchemy的代码库,我是新手。我在为我要编写的查询编写sqlalchemy表达式时遇到问题。在

我们有以下3张表:

  1. 产品-(产品标识、产品描述、状态、可用)
  2. 类别-(类别编号,类别类别描述)
  3. ProductCategoryLink-(产品标识,类别标识)[用于多对多关系]

我正在运行一个查询,它为我提供每个类别的产品计数。有些产品没有分配到任何类别,我也想要这些产品(在这种情况下,类别将为空)。我提出了以下问题

select c.category_name, count(p.product_id)
from Product as p
left join ProductCategoryLink as pc
  on p.product_id = pc.product_id
left join Category as c      
  on c.category_id = pc.category_id
where p.store_id = 1111      
and p.status = 'ACTIVE'      
and p.available = 1
group by c.category_name; 

我的orm文件中有以下映射

^{pr2}$

我想出了下面的ORM表达式

    query = session.query(Category.category_name, func.count(Product.product_id)).join(product_category_link).\
            join(Category).filter(
                and_(Product.store_id == self._store_id,
                    and_(Product.status == 'ACTIVE', Product.available == 1))).\
            group_by(Category.category_name).all()

上面的表达式创建的sql查询不是我想要的。在

sqlalchemy.exc.OperationalError: (OperationalError) (1066, "Not unique table/alias: 'Category'") 'SELECT `Category`.category_name AS `Category_category_name`, count(`Product`.product_id) AS count_1 \nFROM `Product`, `Category` INNER JOIN `ProductCategoryLink` ON `Category`.category_id = `ProductCategoryLink`.category_id INNER JOIN `Category` ON `Category`.category_id = `ProductCategoryLink`.category_id \nWHERE `Product`.store_id = %s AND `Product`.status = %s AND `Product`.available = %s GROUP BY `Category`.category_name' (1, 'ACTIVE', 1)

我做错什么了?在


Tags: andstorenameidsqlalchemy产品表达式count