2009-07-24 5 views
0

Что я здесь делаю неправильно?Ошибка Python: требуется аргумент int

i = 0 
cursor.execute("insert into core_room (order) values (%i)", (int(i)) 

Ошибка:

int argument required 

Поле базы данных является INT (11), но я думаю, что я% генерирует ошибку.

Update:

Вот более тщательный пример:

time = datetime.datetime.now() 
floor = 0 
i = 0 

попробовать: booster_cursor.execute ('вставить в core_room (extern_id, имя, порядок, unit_id, созданные, обновленные) значения (% s,% s,% s,% s,% s,% s) ', (строка [0], строка [0], i, пол, время, время,)) кроме исключения, e: print e

Ошибка:

(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 'order, unit_id, created, updated) values ('99', '99', '235', '12', '2009-07-24 1' at line 1") 

ответ

4

Две вещи. Сначала используйте %s, а не %i. Во-вторых, параметры должны быть в кортеже, поэтому вам нужно (i,) (с запятой после i).

Кроме того, ORDER является ключевым словом, и его следует избегать, если вы используете его как имя поля.

+0

Аргумент% i - это int в db. Мне нужно использовать% s? – slypete

+0

@slypete: Да, используйте '% s'. MySQLdb использует 'format' в качестве параметра' paramstyle' по умолчанию. PEP 249 для получения дополнительной информации: http://www.python.org/dev/peps/pep-0249/ – bernie

+1

Если я использую% s, я получаю SQL-ошибку с сервера MySQL. – slypete

1

Я считаю, что второй аргумент для выполнения() должен быть итерируемым. Если это так, вам нужно изменить:

(int(i)) 

к:

(int(i),) 

, чтобы сделать его в кортеж.

+0

Точно, это должно решить проблему. –

1

Возможно, вы используете ? вместо %i. И вам не хватает скобок.

cursor.execute("insert into core_room (order) values (?)", (int(i),)) 
+1

@Evan: у вас определенно есть правильная идея, но этот 'paramstyle' известен как' qmark', а AFAIK не поддерживается MySQLdb. – bernie

+0

Я просто написал это быстро, чтобы продемонстрировать свое плохое. – slypete

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