Проблемы Python MySQLdb (TypeError: %D формат: требуется число, а не str)


Я пытаюсь выполнить следующую операцию вставки:

cursor.execute("""
                    insert into tree (id,parent_id,level,description,code,start,end)
                    values (%d,%d,%d,%s,%s,%f,%f)
                    """, (1,1,1,'abc','def',1,1)
                    )

структура моей таблицы MYSQL:

id int(255),
parent_id int(255),
level int(11),
description varchar(255),
code varchar(255),
start decimal(25,4),
end decimal(25,4)

однако, когда я запускаю мою программу, я получаю ошибку

"файл" /usr/lib/pymodules/python2.6/MySQLdb/cursors.py", строка 151, in execute query = запрос % db.литерал(аргументы)

TypeError: %D формат: требуется число, а не str"

4 57

4 ответа:

строка формата на самом деле не является обычной строкой формата Python. Вы всегда должны использовать %s для всех полей.

поскольку его данные находятся в целочисленном или десятичном формате, как вы можете использовать %s, который обычно используется для строкового формата %d или %i, следует использовать для целых или десятичных значений.

попробуйте это :

cursor.execute("""
                    insert into tree (id,parent_id,level,description,code,start,end)
                    values (%s,%s,%s,'%s','%s',%s,%s)
                    """%(1,1,1,'abc','def',1,1)
                    )

всякий раз, когда вы видели этот тип ошибок, следует использовать функцию type() для проверки типов значений или переменных...., и увидите тип - 'str'. Означает, что python принимает все значения в строках (по умолчанию тип данных-string). Вот почему ошибка сказала %d для чисел, а не для строк. Поэтому рассмотрим %s в python для каждого типа поля.