dav*_*ave 5 python sql sqlalchemy subquery
这是我需要SQLAlchemy通过其ORM生成的SQL.
SELECT
*
FROM
notes
WHERE
notes.student_id == {student_id}
OR
notes.student_id IN (
SELECT
*
FROM
peers
WHERE
peers.student_id == {student_id}
AND
peers.date_peer_saved >= notes.date_note_saved
)
Run Code Online (Sandbox Code Playgroud)
SQL未经测试.我只是写它来演示我需要SQLAlchemy做什么.
基本上,登录的学生应该看到已保存的列表notes
.notes
然而,唯一的学生应该看到的是那些由他们自己发布的或者由他们的同伴发布的那些 - 但只有那些同意他们在说明被保存之后'结识'.
这样,学生在成为同伴之前就不会看到其他学生发布的笔记.
但是,我无法在SQLAlchemy的ORM中运行它.有帮助吗?
基本上,您可以使用该.subquery()
方法获取可以放入另一个条件的子查询.
就像是
subq = sess.query(Peers.id).filter(and_(Peers.student==student, XXX)).subquery()
Run Code Online (Sandbox Code Playgroud)
然后
notes = sess.query(Notes).filter(or_(Notes.student==student, Notes.studing.in_(subq))).all()
Run Code Online (Sandbox Code Playgroud)
(也是未经测试的,可能不适用于这个实际的查询,但只是为了给你一个想法).
这可能是因为查询存在问题。
看起来您想查看学生 ID 的所有笔记,其中date_peer_saved
>= date_note_saved
。
问题是表notes
和peers
可能是多对一的关系student
。这意味着您正在尝试过滤peers
可能有许多笔记和许多同行进行比较的记录。
您需要以这样的方式连接所有三个表,使得 的每条记录都peers
与 的单个记录相关notes
。如果这不适用于您,那么您需要重新考虑您真正想要的是什么。
也许您想过滤 date_peer_saved 的 MAX >= date_note_saved 的 MAX?
归档时间: |
|
查看次数: |
9749 次 |
最近记录: |