SQLAlchemy 与所有 ORM 类似

问题描述 投票:0回答:1

我需要找到满足传递参数的整个列表的文档。 我使用原始查询完成了它,但是对于我的项目规范,原始查询不能使用,我应该使用 ORM。

原始查询是: SELECT * FROM outbox_document WHERE document_summary like all(array['%par1%', '%par2%', '%par3%']); 它工作得很好,但我找不到类似 ORM 的 LIKE ALL。 请帮忙!

sql postgresql sqlalchemy orm sql-like
1个回答
0
投票

您可以使用

sqlalchemy.all_

OutBoxDocument.document_summary.like(all_(["%par1%", "%par2%", "%par3%"]))

这会生成以下查询

SELECT outbox_document.id, outbox_document.document_summary 
FROM outbox_document 
WHERE outbox_document.document_summary LIKE ALL (%(param_1)s)

完整代码

from sqlalchemy import create_engine, select, all_
from sqlalchemy.orm import Mapped, DeclarativeBase, mapped_column, Session

engine = create_engine("postgresql+psycopg://some_connection_string")

class Base(DeclarativeBase):
    pass

class OutBoxDocument(Base):
    __tablename__ = "outbox_document"
    id: Mapped[int] = mapped_column(primary_key=True)
    document_summary: Mapped[str]

Base.metadata.create_all(engine)

with Session(engine) as session:
    session.add(OutBoxDocument(document_summary="par1 par2"))
    session.add(OutBoxDocument(document_summary="par1 par2 par3"))
    session.add(OutBoxDocument(document_summary="par1 par3"))
    session.commit()

with Session(engine) as session:
    statement = select(OutBoxDocument).where(OutBoxDocument.document_summary.like(all_(["%par1%", "%par2%", "%par3%"])))
    result = session.scalars(statement).all()
    print(result)
© www.soinside.com 2019 - 2024. All rights reserved.