2013-12-09 7 views
1

У меня есть этот список, который я пытаюсь вставить в мою базу данных. Я пробовал много других методов, которые я нашел в Google или здесь, но никто не работает.Вставить список в базу данных mysql

results = ['match number 1','match number 2','match number 3'] 
query = "INSERT INTO round1 (details) VALUES (" 
query = query+"'"+results+"')" 
x = conn.cursor() 
x.execute(query) 
conn.commit() 

Я получаю эту ошибку

Type Error: cannot concatenate 'str' and 'list' objects 

Может кто-нибудь сказать мне, что я делаю неправильно?

+0

Вы вставляете столбец 'results' как * one *, как несколько столбцов или несколько строк? Ваш запрос предполагает, что вы вставляете только один столбец, и я предполагаю, что вы хотите несколько строк. –

+0

Да в одном столбце в виде нескольких строк – blueinc

ответ

3

Не следует использовать конкатенацию, используйте параметры SQL:

query = "INSERT INTO round1 (details) VALUES (%s)" 
c = conn.cursor() 
c.executemany(query, [(r,) for r in results]) 

Ваш код пытался объединить весь список со строкой; вы можете конкатенировать строки только для строк. Но для вставки нескольких строк для каждого значения необходимо выполнить INSERT заявление за запись в results.

Использование SQL параметров здесь имеет ряд преимуществ:

  • Вы оставляете со ссылкой на значении до базы данных, избегая атаки с внедрением SQL.
  • База данных может повторно использовать план запроса для оператора SQL, оптимизируя производительность базы данных.
  • Вы можете использовать cursor.executemany() для запуска того же запроса с разными значениями, все с одним вызовом.

cursor.executemany() вызова здесь берет каждую строку «», расположенную во втором аргументе, принимая значения из каждой строки запустить отдельное INSERT заявление.

+0

только начал изучать python около 2 недель назад, я получаю это, когда я использовал ваш код «ProgrammingError: (1064)« У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее вашему Версия сервера MySQL для правильного синтаксиса для использования рядом с «% s» «в строке 1») « – blueinc

+0

Какой адаптер базы данных вы используете здесь? Я предполагал MySQLdb, который использует '% s' в качестве синтаксиса параметров, но разные адаптеры имеют разные стили. См. 'Modulename.paramstyle' и документацию. –

+0

это mysqldb из lxml import html запросы импорта import MySQLdb import itertools – blueinc

0

i keep getting this error Type Error: cannot concatenate 'str' and 'list' objects can anyone tell me what i am doing wrong ?

Прежде всего, то, что вы делаете неправильно, пытается объединить объекты str и list. Вы не можете этого сделать: вы можете конкатенировать строку со строкой.

Во-вторых, используйте подготовленные операторы, а не строковые манипуляции для связи с вашей базой данных. Это будет меньше кода для вас и более безопасным.

Смежные вопросы