SqlAlchemy with list in where clause



我在数据库中的表如下

Username    city        Type 
 Anna       Paris        abc 
 Marc       london       abc
 erica      rome         AF 
 Sara       Newyork      cbd 
 silvia      paris        AD
我有一个包含字符串值的列表
typelist = {'abc', 'cbd'}

和我想查询我的数据库使用sqlalchemy,从表中获取数据,其中列类型等于列表中的值:

Username    city        Type 
 Anna       Paris        abc 
 Marc       london       abc
 Sara       Newyork      cbd 

我正在尝试这个代码

sql = "SELECT * FROM table WHERE data IN :values" 
query = sqlalchemy.text(sql).bindparams(values=tuple(typelist))
conn.engine.execute(query)

但是它只返回类型列表中的一个值,而不是所有列表中的值。

Username    city        Type 
 Sara       Newyork      cbd 
sql = "SELECT * FROM table WHERE data IN :values" 
query = sqlalchemy.text(sql).bindparams(sqlalchemy.bindparam("values", expanding=True))
conn.engine.execute(query, {"values": typelist})

参考:https://docs.sqlalchemy.org/en/13/core/sqlelement.html sqlalchemy.sql.expression.bindparam.params.expanding

我的解决方案将工作,但你需要格式化你的字符串像这样

sql = "SELECT * FROM table WHERE data IN ('data1', 'data2', 'data3')"

此处不需要使用bind参数。如果你找不到合适的解决方法,就用这个

您可以使用动态SQL方法,从列表值创建一个字符串,并将该字符串添加到SELECT语句中。

queryList = ['abc', 'def']

def list_to_string(inList):
    strTemp = """'"""
    for x in inList:
        strTemp += str(x) + """','"""
    return strTemp[:-2]
sql = """SELECT * FROM table WHERE data in (""" + list_to_string(queryList) + """)"""
print(sql)

最新更新