这是我需要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
)
SQL未经测试。我只是编写它来演示我需要SQLAlchemy做什么。
基本上,登录的学生应该会看到已保存的notes
列表。然而,学生应该看到的唯一notes
是他们自己发布的那些或者他们的同伴发布的那些 - 但只有那些同意他们在该笔记被保存后才会“结识”。
通过这种方式,学生在成为同伴之前不会看到其他学生发布的笔记。
但是,我无法在SQLAlchemy的ORM中运行它。有什么帮助吗?答案 0 :(得分:8)
基本上,您可以使用.subquery()
方法获取可以放入其他条件的子查询。
像
这样的东西subq = sess.query(Peers.id).filter(and_(Peers.student==student, XXX)).subquery()
然后
notes = sess.query(Notes).filter(or_(Notes.student==student, Notes.studing.in_(subq))).all()
(也是未经测试的,可能无法使用此实际查询,但只是为了提供您的想法)。
答案 1 :(得分:0)
这可能是因为查询存在问题。
您似乎希望查看date_peer_saved
为> = date_note_saved
的学生ID的所有注释。
问题是表格notes
和peers
可能是与student
的多对一关系。这意味着你试图过滤peers
的记录,其中可能有许多笔记和许多同行要比较。
您需要以peers
的每条记录与notes
的单条记录相关联的方式加入所有三个表。如果这不适用于您,那么您需要重新考虑您真正要求的内容。
也许你想过滤date_peer_saved的MAX> = date_note_saved的MAX?