MySQLdb Python 插入 %d 和 %s

Posted

技术标签:

【中文标题】MySQLdb Python 插入 %d 和 %s【英文标题】:MySQLdb Python insert %d and %s 【发布时间】:2013-12-26 03:10:06 【问题描述】:

前身:

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)

【问题讨论】:

您缺少%) - .execute("INSERT INTO table VALUES(%d,%s)"% (int(id), string)) 【参考方案1】:

由于在执行查询时整个查询需要采用字符串格式,所以应该使用%s...

查询执行后保留整数值。

所以你的线应该是。

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string))

解释是here

【讨论】:

我在 python 2.7 上收到了类似语法的错误。至少在我这边,如果需要一个参数化的 %s,我的 python 需要一个字符串值,我不得不将它转换为类似 str(someVal) 的字符串。 @Kickass - 您可能需要检查是否有一个字符串插值运算符 (%) 将您的 SQL INSERT 字符串和值元组分开而不是逗号。 @xor 如何仅使用一列来执行此操作?我的 ID 是 Autoincrement。所以我不需要添加它。只需添加字段“Param1”(如此处的示例)。 mycursor.execute("INSERT INTO mytable Param1 VALUES %s", (name))。但它一直在%s 处显示语法错误。我也试过(%s)。没用 @Priya 我在这里找到了解决方案:***.com/questions/41309096/…【参考方案2】:

格式字符串并不是真正的普通 Python 格式字符串。您必须始终对所有字段使用 %s

【讨论】:

【参考方案3】:

我在dev.mysql.com 上找到了解决方案。简而言之,在.execute()的第二个参数中使用dict,而不是tuple

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)

【讨论】:

【参考方案4】:

您在字符串格式中错过了'%'

"(INSERT INTO table VALUES(%d,%s)"%(int(id), string))

【讨论】:

我很抱歉这被否决了,但这是一个前进的答案("INSERT INTO table VALUES(%d,'%s')"%(int(id), string))你应该编辑它 已编辑。谢谢。 养成使用cursor.execute函数的参数来消除注入风险的习惯要安全得多:***.com/a/775399/6284025

以上是关于MySQLdb Python 插入 %d 和 %s的主要内容,如果未能解决你的问题,请参考以下文章

MySQLdb使用批量插入executemany方法插入mysql

如何使用python mysqldb一次插入多行

python mysqldb 报错: ProgrammingError: must be real number, not str 解决

mysqldb UPDATE函数Python错误str

使用 MySQLdb 插入 MySQL - python

如何通过mysqldb将熊猫数据框插入数据库?