我有一个返回以下内容的函数:
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])'
有没有一种方法可以消除数字中的那些括号?我假设我需要在最后一个地方的choose_tables()函数中执行此操作,然后再返回final_table_set?这些是整数,而不是SQL语句中使用的字符串,因此我认为','。join不会起作用
答案 0 :(得分:4)
有security concerns与从变量构造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)'
答案 1 :(得分:1)
使用地图将列表中的每个元素转换为字符串,然后根据您的问题提示使用连接:
data2 = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(','.join(map(str, data)))