MySQLdb Python插入%d和%s

时间:2013-12-09 04:45:20

标签: python mysql mysql-python

前体:

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)

4 个答案:

答案 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))