SQLAlchemy中的PostgreSQL RAW查询[重复]
Posted
技术标签:
【中文标题】SQLAlchemy中的PostgreSQL RAW查询[重复]【英文标题】:PostgreSQL RAW query in SQLAlchemy [duplicate] 【发布时间】:2021-05-25 23:57:24 【问题描述】:我正在尝试对 Flask 项目中与 SqlAlchemy 一起使用的 PostgreSQL 数据库执行 原始查询。
我有一个类 Project,想使用 IN 运算符查询数组
这是有效的查询:
db.session.execute( "SELECT * \
FROM project\
WHERE project.id IN (1,2,3)"
)
我想传递一个变量而不是 (1,2,3),但不知道该怎么做。
我想做这样的事情:
db.session.execute( "SELECT * \
FROM project\
WHERE project.id IN
(my_array)"
)
我试过了,但是不行:
db.session.execute( "SELECT * \
FROM project\
WHERE project.id IN
param",
"param":(1,2,3)
)
请帮忙!:)
【问题讨论】:
【参考方案1】:将您的查询更改为此并将值作为元组传递:
db.session.execute("SELECT * FROM project WHERE project.id IN (%s)",(1,2,3))
【讨论】:
【参考方案2】:选项 1:
raw_sql_param = """
SELECT *
FROM project
WHERE project.id IN :project_id
"""
stmt = text(raw_sql_param)
stmt = stmt.bindparams(bindparam("project_id", expanding=True))
res = session.execute(stmt, "project_id": [1, 2, 3])
选项 2:(特定于 postgresql)
raw_sql_param = """
SELECT *
FROM project
WHERE project.id = ANY(:project_id)
"""
stmt = text(raw_sql_param)
res = session.execute(stmt, "project_id": [1, 2, 3])
查看类似问题的更多扩展答案: How can I bind a list to a parameter in a custom query in sqlalchemy?
【讨论】:
以上是关于SQLAlchemy中的PostgreSQL RAW查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQLAlchemy 核心选择除 postgresql 中的 1 个特定列之外的所有表列?
在 Flask-sqlalchemy 和 Postgresql 中使用 JSON 类型
用于生产和开发的烧瓶 postgresql sqlalchemy 配置
按多个参数逗号值过滤烧瓶sqlalchemy postgresql
如何在 flask_sqlalchemy 中使用 PostgreSQL 的“INSERT...ON CONFLICT”(UPSERT)功能?
如何在 Django Python 中使用 PostgreSQL 为 SQLAlchemy 连接池设置方言?需要启用预 ping 功能