我需要找到满足传递参数的整个列表的文档。 我使用原始查询完成了它,但是对于我的项目规范,原始查询不能使用,我应该使用 ORM。
原始查询是: SELECT * FROM outbox_document WHERE document_summary like all(array['%par1%', '%par2%', '%par3%']); 它工作得很好,但我找不到类似 ORM 的 LIKE ALL。 请帮忙!
您可以使用
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)