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 功能