Вставка 200 переменных в строку, хранящуюся в списке - PullRequest
1 голос
/ 04 июня 2019

У меня есть список переменных как:

listV = ['v1, 'v2', ...,'v200']

Я хочу сделать что-то вроде следующего более чистым способом:

q1 = 'insert into myTable ({}, {}, {},....{})'.format(listV)

Мой желаемый результат будет:

q1 = 'insert into myTable (v1, v2, v3, ...., v200)'

Для меньшего числа переменных я могу написать более чистый код, но с 200 переменными у меня возникают трудности при создании более чистого кода.

Мне нужно создать q1 динамически при изменении содержимого listV, но длина listV остается постоянной.

Ответы [ 5 ]

3 голосов
/ 04 июня 2019
>>> listV = ['v1', 'v2', 'v200']
>>> q1 = 'insert into myTable'
>>> q1 = q1 + ' (' + ', '.join(listV) +  ')'
>>> q1
'insert into myTable (v1, v2, v200 )'
2 голосов
/ 04 июня 2019
listV = ['v1', 'v2', 'v200']
q1 = "insert into myTable ({})".format(", ".join(listV))
1 голос
/ 04 июня 2019
listV = [i for i in range(200)]
q1 = str("insert into myTable (" + "{}, "*(len(listV)-1) + "{})").format(*listV)

Как уже упоминали другие, sql-запросы форматирования строк делают вашу базу данных уязвимой для SQL-инъекций.

РЕДАКТИРОВАТЬ У Олвина Рота был очень хороший ответ!Вот альтернативная версия, которая также работает с целыми числами:

listV = [i for i in range(200)]
q1 = "insert into myTable ({})".format(str(listV)[1:-1])
1 голос
/ 04 июня 2019

Я так думаю ...

my_list = [1,2,3]
q = "insert into mytable ("
for i in range(0, len(my_list), 1):
    currNum = my_list[i]
    if i != len(my_list) - 1:
        q += str(currNum) + ","
    else:
        q += str(currNum)
q += ")"
print(q)

Я новичок в Python -_-

1 голос
/ 04 июня 2019

Чтобы избежать неприятностей, вы также можете создавать строку формата программно.

listV = ["V1", "V2", "V3"]

n = len(listV)

fstring = "insert into myTable (" + "{}, " * (n-1) + "{})"

q1 = fstring.format(*listV) 
# The * unpacks the items in listV into separate arguments
print(q1)
# >>> insert into myTable (V1, V2, V3)
...