2012-06-25 4 views
0

Сначала я извлек список колледжей с сайта колледжа в виде кортежа кортежей:Получение TypeError при вставке данных в базу данных

((«имя1», «ADDRESS1»), («name2», 'address2'), ('name3', 'address3'))

тогда я хочу написать это в базе данных с именем 'sample' и в таблице 'collegelist'. Таблица имеет два поля (имя VARCHAR (400) NOT NULL, адрес VARCHAR (500)):

Вот код:

for college in tuples: 
    cursor.execute('INSERT INTO collegelist (name, address) VALUES ("%s", "%s")') %(college[0], college[1]) 
    db.commit() 
db.close() 

Но всегда дают следующие TypeError:

TypeError: unsupported operand type(s) for %: 'long' and 'tuple' 

Я также попытался вставить только имена и оставить адреса, затем я получил следующий тип Ошибка:

TypeError: unsupported operand type(s) for %: 'long' and 'str' 

Теперь я делаю не понимаю, откуда пришел длинный тип. В программе есть только строки и кортежи.

Note: Names and addresses of colleges have single quotes, double quotes, dash, period.

Зачем возникает эта ошибка и как ее удалить? Заранее спасибо.

ответ

1

cursor.execute('INSERT INTO collegelist (name, address) VALUES ("%s", "%s")') <--

В этот момент, вы закрыли вызов execute. Кроме того, вы должны передать аргументы execute, и никогда, никогда, никогда не анализируете их в запросе.

q_insert = "INSERT INTO collegelist (name,address) VALUES (%s,%s)" 
for college in tuples: 
    cursor.execute(q_insert,(college[0], college[1])) 
    db.commit() 
+1

Передача значений параметров для выполнения() помогает предотвратить [атака инъекции SQL] (http://www.unixwiz.net/techtips/sql-injection.html), потому что экранирующие символы интерпретируются как часть стоимости , и не может влиять на запрос. – invert

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