我有一個(gè)返回以下內(nèi)容的函數(shù):def choose_tables(self):......return final_table_set它返回一個(gè)整數(shù)列表,如下所示:[11,12,13,14,15]我遇到的問題是我試圖在另一個(gè)執(zhí)行 SQL 并在 DataFrame 中返回它的函數(shù)中使用該返回值: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) 它出錯(cuò)了,因?yàn)樗沁@樣讀的:'SELECT * FROM TABLE_A WHERE TABLE_ID IN ([11, 12, 14, 15])'有沒有辦法擺脫數(shù)字周圍的括號?我假設(shè)在返回 final_table_set 之前,我需要在最后某處的choose_tables() 函數(shù)中執(zhí)行此操作?這些是整數(shù),而不是在 SQL 語句中使用的字符串,所以我不認(rèn)為 ','.join 會起作用
2 回答

侃侃爾雅
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
從變量構(gòu)造 SQL 字符串存在安全問題,但除此之外 - 獲得所需結(jié)果的最簡單方法是:
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貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用 map 將列表中的每個(gè)元素轉(zhuǎn)換為字符串,然后按照您在問題中的提示使用 join :
data2 = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(','.join(map(str, data)))
添加回答
舉報(bào)
0/150
提交
取消