前体:
MySQL Table created via:
CREATE TABLE table(Id INT PRIMARY KEY NOT NULL, Param1 VARCHAR(50))
功能:
.execute("INSERT INTO table VALUES(%d,%s)", (int(id), string)
输出:
TypeError: %d format: a number is required, not a str
我不确定这里发生了什么,或者为什么我无法执行命令。这是在Python中使用MySQLdb。 .execute
在游标对象上执行。
编辑:
问题:Python MySQLdb issues (TypeError: %d format: a number is required, not str)
说你必须对所有字段使用%s
。为什么会这样?为什么这个命令有效?
.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string)
答案 0 :(得分:23)
由于整个查询需要采用字符串格式,因此执行查询时应使用%s
...
执行查询后,将保留整数值。
所以你的行应该是。
.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string))
说明是here
答案 1 :(得分:6)
格式字符串实际上不是普通的Python格式字符串。您必须始终对所有字段使用%s
答案 2 :(得分:0)
我在dev.mysql.com上找到了解决方案。简而言之,请在dict
的第二个参数中使用tuple
而不是.execute()
:
add_salary = ("INSERT INTO salaries "
"(emp_no, salary, from_date, to_date) "
"VALUES (%(emp_no)s, %(salary)s, %(from_date)s, %(to_date)s)")
data_salary = {
'emp_no': emp_no,
'salary': 50000,
'from_date': tomorrow,
'to_date': date(9999, 1, 1),
}
cursor.execute(add_salary, data_salary)
答案 3 :(得分:-2)
您错过了字符串格式的'%'
"(INSERT INTO table VALUES(%d,%s)"%(int(id), string))