Снятие скобок вокруг списка целых чисел - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть функция, которая возвращает следующее:

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 будет работать

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Используйте map для преобразования каждого элемента в списке в строку, затем используйте join, как вы намекнули в своем вопросе:

data2 = "SELECT * FROM TABLE_A WHERE TABLE_ID IN ({})".format(','.join(map(str, data)))
0 голосов
/ 07 февраля 2019

Существуют проблемы безопасности , связанные с созданием строк 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)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...