我在数据库中的表如下
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)