2012-03-17 3 views
0
conn = MySQLdb.connect(host=IP,user='john',passwd='ab2nng',db='mydb') 
cursor = conn.cursor() 

#this works. 
cursor.execute("select * from crawl_log") 
res = cursor.fetchall() 
print res 

#this doesn't work. 
cursor.execute("insert into crawl_log(k, v) values(%s, %s)", ('test','test')) 

Откуда я знаю, почему это не сработало? Ошибок нет, ничего.Как проверить, почему мой запрос INSERT не работает?

+0

Трудно сказать из документов модуля mysqldb, но вам могут понадобиться кавычки вокруг переменных подстановки, как в курсоре.execute («insert into crawl_log (k, v)» («% s», «% s») ", ('test', 'test')). Синтаксис% s выглядит как формат sprintf, подразумевая, что это замена текста и не связанные переменные ... но документ не говорит в любом случае. –

+0

Как в стороне, при отладке кода базы данных иногда полезно разговаривать с вашей базой данных в интерактивном режиме (например, вводить SQL непосредственно в базу данных, используя phpMyAdmin или аналогичный.) Это помогает определить, является ли это ваш SQL-код неправильным, или ваш код Python, который неправильно. –

ответ

0

по умолчанию он начнет транзакцию, которая должна быть зафиксирована после любого заявления, которое влияет на изменение данных. Вы пробовали conn.commit() после вашей вставки?

0

Типичная причина проблемы, как это опечатка названия строк/таблицы/базы данных

, пожалуйста, проверьте, это всегда главный вопрос со мной портя

Другое дело, что название строки/таблица/дб может быть слишком коротким, чтобы исправить эту надстройки «» вокруг имени , например, ключ будет «ключ»

надеюсь, это будет исправить ваш вопрос

+0

Нет. Все правильно. Я даже изменил имя столбца таблицы и столбца. – TIMEX