2013-04-26 3 views
0

Я попытался это много способов, и я не могу показаться, чтобы понять это, но в любом случае вот что им делать:Python - MySQLdb - Обновление строки вызывает TypeError: не достаточно аргументов для строки формата

threadupdatequery = "UPDATE %s SET topic_name=%%s, subject_name=%%s, poster_name=%%s, time=%%s, image=%%s, replies=%%s, id=%%s, keywords=%%s, text=%%s WHERE id=%%s" % ('Threads') 
... 
(topic, subject, name, time, image, replies, ID, kw, body) = self.tframe.Get() 
cur.execute(threadupdatequery, (topic, subject, name, time, image, replies, ID, kw, body)) 

Первоначально я сделал это, которое у меня не было сомнений, будет работать, но я был неправ:

cur.execute(threadupdatequery, self.tframe.Get()) 

я получаю:

File "C:\Python27\Work\SiteEditor.py", line 216, in UpdateThread 
cur.execute(threadupdatequery, (topic, subject, name, time, image, replies, ID, kw, body)) 
File "C:\Python27-32Bit\lib\site-packages\MySQLdb\cursors.py", line 184, in execute 
query = query % db.literal(args) 
TypeError: not enough arguments for format string 

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

Спасибо :)

+2

10 раз %% s, но только 9 переменных в execute() -> отсутствует последний id? – Gryphius

+0

Wow thats совсем не то, что я ожидал, но да, это было вам спасибо, я полностью забыл о 'WHERE id = %% s' part –

+0

добавлен как ответ, не стесняйтесь принимать, если он решил вашу проблему ;-) – Gryphius

ответ

1

запрос обновления имеет 10 %%s заполнителей, но вызов выполнить() имеет только 9 замену переменные. последние WHERE id=%%s не могут быть заменены. если вы добавите недостающую переменную, это, вероятно, сработает.

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