我正在尝试编写一个用作column_property
的查询。你知道吗
表说明(相关字段):
会话
跑步
测试
环境
我试图通过选择所有通过测试表匹配的运行来计算会话开始时间,对于给定的会话。然后得到开始时间的最小值。你知道吗
我对start_time
的第一次尝试如下:
start_time = column_property(
select([func.min(Run.start_time)]).
where(Run.session_id == session_id).
where(Environment.key == environment_id))
但是对于给定会话中的所有环境,这都是相同的start_time
。你知道吗
我试着改进它(见下文)。你知道吗
但失败的原因如下:
sqlite3.OperationalError: no such column: sessions.environment_id
虽然我看到环境id在上面定义了几行:
class Session(BASE):
key = Column(Integer, primary_key=True)
session_id = Column(Integer)
environment_id = Column(Integer, ForeignKey("environments.key"))
environment = relationship("Environment")
start_time = column_property(
select([func.min(Run.start_time)]).
select_from(
Run.__table__.join(Test.__table__, Run.test_id == Test.key)).
where(Run.session_id == session_id).
group_by(environment_id))
根据我对SQL的反复试验,我尝试生成以下查询:
SELECT MIN(runs.start_time) FROM
runs JOIN tests ON runs.test_id = tests.key
WHERE runs.session_id = ? GROUP BY environment_id
我非常感谢你的帮助
更新:我更新了Session
类代码
在字段前添加表名。i、 电子
我得到错误
sqlite3.OperationalError: no such column: sessions.environment_id
的原因是我试图从Run
表和Test
表之间的联接中进行选择。所以我不能从Session
表中GROUP BY
一个字段。你知道吗解决方案基本上是两种尝试的交叉:
因此,我需要创建一个
JOIN
,正如我从第二次尝试中推断的那样。但是我需要另一个WHERE
语句来代替GROUP BY
,以便只选择那些具有给定会话ID并且属于具有给定环境ID的测试的运行相关问题 更多 >
编程相关推荐