2013-06-22 5 views
0

В питона с MySQLdb Я пытаюсь выполнить следующие действия:питон MySQLdb подготовил отборное заявление

cur.execute("select COUNT(*) from adjacency where r = %d and c = %d)" % (curRow, curCol) 

r и c целые поля в таблице adjacency, а также образуют составной первичный ключ. curRow и curCol являются целыми переменными в моей программе python. MySQL жалуется:

_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%d and c = %d' at line 1") 

В конце концов, я хочу, чтобы проверить, если уже существует ряд в смежности с r=curCow и c=curCol. Если это так, обновите поле в таблице. В противном случае вставьте строку в таблицу.

  1. Что не так с моим подготовленным заявлением?

Вся помощь очень признательна!

+1

«Что не так с моим подготовленным заявлением?» У вас нет подготовленного заявления. Они не поддерживаются модулем Python MySQLdb. – glglgl

ответ

6

Похоже, что у вас есть кронштейн в неправильном месте.

Изменить ...

cur.execute("select COUNT(*) from adjacency where r = %d and c = %d)" % (curRow, curCol) 

... до ...

cur.execute("select COUNT(*) from adjacency where r = %d and c = %d" % (curRow, curCol)) 

... хотя это безопаснее использовать ...

cur.execute("select COUNT(*) from adjacency where r = %s and c = %s", (curRow, curCol)) 

... который защитит вас от потенциальной инъекции SQL.