微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SqlAlchemy 在 where 子句中带有列表

如何解决SqlAlchemy 在 where 子句中带有列表

我在数据库中的表如下

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')"

这里不需要使用绑定参数。如果您没有得到任何适当的解决方案,请使用此

,

您可以使用动态 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。