是否可以使用您自己的原始 SQL 进行编辑或覆盖 ORM 生成的 SQL?或者 ORM 是否足够灵活,可以构建几乎任何我能想象到的查询?
具体来说,这是我试图进行的查询,也许通过 ORM 构建并不太难,尽管我看不到任何明显的构建路径。这是模型:
class AllocationStatus(Base):
STATUS_RESERVED = 1
STATUS_RELEASED = 2
STATUS_CHOICES = (
(STATUS_RESERVED, "Reserved"),
(STATUS_RELEASED, "Released"),
)
__tablename__ = 'allocation_status'
id = Column(Integer, primary_key=True)
allocation_id = Column(Integer, ForeignKey('allocation.id'))
allocation = relationship('Allocation')
status = Column(Integer())
Run Code Online (Sandbox Code Playgroud)
这个想法是,对于给定的外键 ID allocation_id,我想知道 中的最新记录allocation_status。
为了在原始 SQL 中实现这一点,我的目标是以下查询:
SELECT allocation_status.*
FROM allocation_status
LEFT JOIN allocation_status allocation_status2
ON allocation_status.allocation_id = allocation_status2.allocation_id
AND allocation_status.id < allocation_status2.id
WHERE allocation_status2.id IS NULL;
Run Code Online (Sandbox Code Playgroud)
@Abdou 的答案是正确的方法,但您也可以使用以下命令运行文本 SQL Query.from_statement():
session.query(AllocationStatus).\
from_statement(text("""
SELECT allocation_status.*
FROM allocation_status
LEFT JOIN allocation_status allocation_status2
ON allocation_status.allocation_id = allocation_status2.allocation_id
AND allocation_status.id < allocation_status2.id
WHERE allocation_status2.id IS NULL;""")).\
all()
Run Code Online (Sandbox Code Playgroud)
注意使用text().
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |