Как превратить список кортежей в строку? - PullRequest
1 голос
/ 24 мая 2010

У меня есть список кортежей, которые я пытаюсь включить в SQL-запрос, но я не могу понять, как объединить их без добавления косой черты.Вот как:

list = [('val', 'val'), ('val', 'val'), ('val', 'val')]

Если я превращу каждый кортеж в строку и попытаюсь соединить их запятой, я получу что-то вроде

' (\'val\, \'val\'), ...  '

Как правильно поступитьэто, так что я могу получить список (без скобок) в виде строки?

Я хочу в итоге ::

q = """INSERT INTO test (feed,site) VALUES %s;"""  % string
string = " ('val', 'val'), ('val', 'val'), ('val', 'val') "

Ответы [ 5 ]

3 голосов
/ 24 мая 2010

Как это?

>>> l=[('val', 'val'), ('val', 'val'), ('val', 'val')]
>>> ','.join(map(','.join,l))
'val,val,val,val,val,val'
2 голосов
/ 25 мая 2010

Используя MySQLdb, executemany делает это.

cursor = db.cursor()
vals = [(1,2,3), (4,5,6), (7,8,9), (2,5,6)]
q = """INSERT INTO first (comments, feed, keyword) VALUES (%s, %s, %s)"""  
cursor.executemany(q, vals)
1 голос
/ 24 мая 2010
>>> L = [('val', 'val'), ('val', 'val'), ('val', 'val')]
>>> ','.join([repr(tup) for tup in L])
"('val', 'val'),('val', 'val'),('val', 'val')"

Хотя, как отмечали другие, делать это в строковом заполнителе, предназначенном для отправки в MySQL, довольно небезопасно.

1 голос
/ 24 мая 2010

Вы не должны этого делать. Посмотрите на определение функций, которые используются для выполнения вашего оператора SQL. Они позаботятся о форматировании. Сам оператор SQL должен содержать только заполнители.

Например, официальные документы для MySQLdb показывают, как делать именно то, что вы хотите .

1 голос
/ 24 мая 2010

Это:

",".join( x+","+y for x,y in lst )

даст:

'val,val,val,val,val,val'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...