我有一个返回以下内容的函数:def choose_tables(self):......return final_table_set它返回一个整数列表,如下所示:[11,12,13,14,15]我遇到的问题是我试图在另一个执行 SQL 并在 DataFrame 中返回它的函数中使用该返回值:def execute_sql(self): s = self.connection() data = self.choose_tables() data2 = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(data) df = pd.read_sql(data2, s) 它出错了,因为它是这样读的:'SELECT * FROM TABLE_A WHERE TABLE_ID IN ([11, 12, 14, 15])'有没有办法摆脱数字周围的括号?我假设在返回 final_table_set 之前,我需要在最后某处的choose_tables() 函数中执行此操作?这些是整数,而不是在 SQL 语句中使用的字符串,所以我不认为 ','.join 会起作用
2 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
从变量构造 SQL 字符串存在安全问题,但除此之外 - 获得所需结果的最简单方法是:
data = [11,12,13,14,15]
sql = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(",".join(str(d) for d in data))
>>> 'SELECT * FROM TABLE_A WHERE TABLE_ID IN (11,12,13,14,15)'
吃鸡游戏
TA贡献1829条经验 获得超7个赞
使用 map 将列表中的每个元素转换为字符串,然后按照您在问题中的提示使用 join :
data2 = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(','.join(map(str, data)))
添加回答
举报
0/150
提交
取消