SQLAlchemy和RAW SQL:列表作为输入

时间:2014-12-26 11:24:36

标签: python mysql flask sqlalchemy flask-sqlalchemy

我正在使用Flask-SQLAlchemy,我在SQL语法中遇到了一些IN子句的问题。我希望我的IN子句“读取”的数据是包含一些数据的列表,例如

args = [1, 2, 3]

这是我的代码的样子。

connection = db.session.connection()
raw_sql = text("""
        SELECT
          *
        FROM 
         table
        WHERE data IN :list
        """)
query = connection.engine.execute(raw_sql, {'list' : args})

我已尝试将插入元组和列表插入到args参数中,但没有任何效果。我要么:

  • Python'tuple'无法转换为args = tuple([1, 2, 3])
  • 的MySQL类型
  • 使用args = [1, 2, 3]
  • 时,无法将Python“list”转换为MySQL类型


如何从SQLAlchemy列表中读取并使用RAW SQL和参数作为输入?

2 个答案:

答案 0 :(得分:4)

在python 3.7上:

import sqlalchemy

args = [1, 2, 3]
raw_sql = "SELECT * FROM table WHERE data IN :values" 
query = sqlalchemy.text(raw_sql).bindparams(values=tuple(args))
conn.engine.execute(query)

答案 1 :(得分:0)

您应该尝试这种方法:

args = [1, 2, 3]
raw_sql = "SELECT * FROM table WHERE data IN %s" 
params = [(args,)] # the comma allows to convert the list into a tuple
conn.engine.execute(raw_sql, params)