属性错误:'Query'对象在将表与查询联接时没有属性'is_clause_element'



AttributeError: 'Query'对象没有属性'is_clause_element'

我有一个查询,计算一个公司拥有的关键字数量,然后根据他们拥有的关键字数量对它们进行排序。

query_company_ids = Session.query(enjordplatformCompanyToKeywords.company_id.label("company_id"),func.count(enjordplatformCompanyToKeywords.keyword_id)).group_by(enjordplatformCompanyToKeywords.company_id).order_by(desc(func.count(enjordplatformCompanyToKeywords.keyword_id))).limit(20)

然后我想获得这些公司的信息,如图像,标题,信息等,并将其发送到前端(这是稍后通过companyes_query循环完成的)。
虽然我在建立query_company_ids查询和enjordplatformCompanies表之间的连接时遇到了麻烦。

我已经尝试了两种方法:

  1. companyes_query = Session。查询(enjordplatformCompanies query_company_ids) .filter (enjordplatformCompanies。id == query_company_ids.company_id).all()
  2. companyes_query = Session。查询(enjordplatformCompanies query_company_ids)。join(query_company_ids, query_company_ids.c.company_id == enjordplatformCompanies.id).all()

但两者都导致错误:AttributeError: 'Query' object has no attribute 'is_clause_element'


如何连接query_company_ids查询和enjordplatformCompanies表?

感谢下面是表的定义

class enjordplatformCompanies(Base):
__tablename__ = "enjordplatform_companies"
id = Column(Integer, primary_key=True,  unique=True)
name = Column(String)
about = Column(String)
image = Column(String)
website = Column(String)
week_added = Column(Integer)
year_added = Column(Integer)
datetime_added = Column(DateTime)
created_by_userid = Column(Integer)
company_type = Column(String)
contact_email=Column(String)
adress=Column(String)
city_code=Column(String)
city=Column(String)

class enjordplatformCompanyToKeywords(Base):
__tablename__ = "enjordplatform_company_to_keywords"
id = Column(Integer, primary_key=True, unique=True)
company_id = Column(Integer,ForeignKey("enjordplatform_companies.id"))
keyword_id = Column(Integer,ForeignKey("enjordplatform_keywords.id"))

我复制了上面的示例查询,并且得到了很多奇怪的错误,直到我意识到你使用Session而不是session。我想确保你使用的是一个实例,而不是类或会话生成器。

下面,我创建了一个显式的subquery()来获取与其关键字计数配对的公司id,然后我根据该id加入公司类,将订单和限制应用于最终查询。

with Session(engine) as session, session.begin():
subq = session.query(
enjordplatformCompanyToKeywords.company_id,
func.count(enjordplatformCompanyToKeywords.keyword_id).label('keyword_count')
).group_by(
enjordplatformCompanyToKeywords.company_id
).subquery()
q = session.query(
enjordplatformCompanies,
subq.c.keyword_count
).join(
subq,
enjordplatformCompanies.id == subq.c.company_id
).order_by(
desc(subq.c.keyword_count)
)
for company, keyword_count in q.limit(20).all():
print (company.name, keyword_count)

这不是确切的方法,但解释了上面调用.subquery()的意图:子查询

相关内容

最新更新