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 报错: ProgrammingError: must be real number, not str 解决