是否可以使用您自己的原始 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())
想法是,对于 allocation_id 的给定外键 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;
请您参考如下方法:
@Abdou 的回答是正确的方法,但您也可以使用 Query.from_statement() 运行文本 SQL :
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()
注意 text() 的使用.
