SQL sqlalchemy内部联接错误:“0”;在列';的行中找不到列;xxxx.id'&引用;

SQL sqlalchemy内部联接错误:“0”;在列';的行中找不到列;xxxx.id'&引用;,sql,sqlalchemy,inner-join,Sql,Sqlalchemy,Inner Join,示意图:我有这些表[列] Flights [id, date, user_id, club_id, etc] Clubs [id, etc] Users [id, name, club_id, etc] 我可以找到每个用户的航班数,每个俱乐部的航班数,等等 对我来说,最具挑战性的部分是在数据库中查找每个俱乐部中提交航班的(唯一)用户数。我很确定,出发点是 SELECT flights.club_id, users.name FROM flights INNER JOIN users ON fl

示意图:我有这些表[列]

Flights [id, date, user_id, club_id, etc]
Clubs [id, etc]
Users [id, name, club_id, etc]
我可以找到每个用户的航班数,每个俱乐部的航班数,等等

对我来说,最具挑战性的部分是在数据库中查找每个俱乐部中提交航班的(唯一)用户数。我很确定,出发点是

SELECT flights.club_id, users.name FROM flights
INNER JOIN users ON flights.club_id=users.club_id 
然后在此基础上进行计数

但是我已经尝试用sqlalchemy函数(v1.3.1)和“text”实现上面的查询连接,例如

…我从以下任一方法中获得此错误:

"Could not locate column in row for column 'flights.id'"
有人知道如何解决这个问题吗?我在网上很少看到关于这个错误的信息

或者有没有更好的方法来获取数据库中每个俱乐部的航班用户数


以下是完整的错误跟踪:

  File "/home/bret/pycharm/helpers/pydev/_pydevd_bundle/pydevd_exec.py", line 3, in Exec
    exec exp in global_vars, local_vars
  File "<input>", line 1, in <module>
  File "/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 3186, in all
    return list(self)
  File "/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 105, in instances
    util.raise_from_cause(err)
  File "/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 89, in instances
    for row in fetch
  File "/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/orm/loading.py", line 508, in _instance
    tuple([row[column] for column in pk_cols]),
  File "/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/engine/result.py", line 627, in _key_fallback
    % expression._string_or_unprintable(key)
NoSuchColumnError: "Could not locate column in row for column 'flights.id'"
文件“/home/bret/pycharm/helpers/pydev/_-pydevd_-bundle/pydevd_-exec.py”,exec中的第3行
全局变量、本地变量中的exec exp
文件“”,第1行,在
文件“/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site packages/sqlalchemy/orm/query.py”,共3186行
返回列表(自我)
文件“/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site packages/sqlalchemy/orm/load.py”,第105行,在实例中
util.raise\u from\u cause(err)
文件“/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/util/compat.py”,第398行,来源于
重新释放(类型(异常),异常,tb=exc\U tb,原因=原因)
文件“/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site packages/sqlalchemy/orm/load.py”,第89行,在实例中
用于获取中的行
文件“/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site packages/sqlalchemy/orm/load.py”,第508行,在_实例中
元组([row[column]表示pk_cols中的列]),
文件“/home/bret/.local/share/virtualenvs/skylinesC-0VgGNjgC/local/lib/python2.7/site-packages/sqlalchemy/engine/result.py”,第627行,在_key_fallback中
%表达式。\u字符串\u或\u不可打印(键)
NoSuchColumnError:“无法在列'flights.id'的行中找到列”

您想在Flights表中统计俱乐部的唯一用户。对于计数,您不需要加入表。至少在假设成立的情况下,航班表中的“用户id,俱乐部id”对是正确的。查询可以如下所示:

uniquesum = db.session.query(Flights.club_id, 
   func.count((Flights.user_id.distinct())).label('countusers') ).group_by(Flights.club_id)

这只返回两列:俱乐部id和计数。如果您需要俱乐部表中的更多信息,您可以加入这些表以获取俱乐部名称等信息。

请在代码问题中给出一个--cut&paste&runnable代码;示例输入(作为初始化代码)以及所需和实际输出(包括逐字错误消息);标签和版本;清晰的说明和解释。对于包含最少代码的错误,您可以给出“显示为OK”的代码,并通过“显示为not OK”的代码进行扩展。(调试基础。)对于包含DBMS和DDL的SQL,其中包括约束和索引以及表格初始化。当您得到一个您不期望的结果时,停止尝试找到您的总体目标,并找出您的误解所在。--隔离第一个意外的子表达式及其输入和输出。(基本原理)问一下。每个帖子只需问1个(明确或具体)问题。PS打印您正在传递的实际查询字符串。我仍有兴趣了解有关错误的更多信息“无法在列'flights.id'的行中找到列”抱歉@philipxy模型代码太长太复杂,无法发布。我确实引用了我在“query=…”行中发布的实际查询字符串。我很确定查询字符串对于更简单的模型代码是有效的,并且怀疑问题出在其他地方……不知道其他人是否遇到过此错误。您没有发布实际执行的查询字符串。您发布了计算表达式并通过另一种语言调用api的代码。您的错误消息还涉及flights.id列,但给定代码中没有此类表达式。您可能有一个视图,或者错误可能来自运行不同的代码。不管您的模型代码是什么,您都应该尽可能多地给出一个示例&看看在每一层中发生了什么&在它们之间传递。PS当然,你是唯一一个犯下这个错误的人是极不可能的。谢谢安迪!这很有效。在我看来,这可以转化为“选择flights.club\u id作为flights\u club\u id,按flights.club\u id从flights组中计数(不同的flights.pilot\u id)作为count用户”
uniquesum = db.session.query(Flights.club_id, 
   func.count((Flights.user_id.distinct())).label('countusers') ).group_by(Flights.club_id)