如何在FastAPI paginate的SQL文本查询中传递占位符参数
解决FastAPI paginate结合SQLAlchemy文本查询的参数绑定问题
要让SQLAlchemy的文本查询语句在FastAPI的paginate方法中正确绑定查询参数,你可以通过以下两种方式实现:
方法一:直接在text语句上绑定参数
使用SQLAlchemy的bindparams方法将参数直接绑定到文本查询对象上,再传入paginate:
from sqlalchemy import text from fastapi_pagination.ext.sqlalchemy import paginate # 绑定参数到text语句 stmt = text("SELECT * from table where id=:id and name=:name").bindparams(id="1234", name="alpha") # 传入paginate执行分页查询 data = await paginate(db, stmt, additional_data={})
方法二:用select包裹text语句并传递参数
如果需要更灵活的参数传递方式,可以用select包裹文本查询,再通过params方法传入查询参数:
from sqlalchemy import text, select from fastapi_pagination.ext.sqlalchemy import paginate stmt = text("SELECT * from table where id=:id and name=:name") # 用select包裹文本查询并传入参数 query = select(stmt).params(id="1234", name="alpha") # 传入paginate执行分页查询 data = await paginate(db, query, additional_data={})
注意:paginate方法自带的params参数是用于控制分页的偏移量和条数(比如params={"offset": 0, "limit": 10}),和SQL查询的占位符参数不是同一概念,不能用它传递你的查询条件。
内容的提问来源于stack exchange,提问作者eht_ck
相关产品推荐
相关产品推荐

