MySQLdb Python插入%d和%s
前体:MySQLdb Python插入%d和%s,python,mysql,mysql-python,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 我不知道这里发生了什么,也不知道为什么我不能执行这个
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
在游标对象上执行
编辑:
问题是:
表示必须对所有字段使用%s
。为什么会这样?为什么这个命令有效
.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string)
由于执行查询时整个查询需要采用字符串格式,因此应使用
%s
执行查询后,保留整数值
所以你的台词应该是
.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string))
原因是您在字符串格式中遗漏了一个
'%'
"(INSERT INTO table VALUES(%d,%s)"%(int(id), string))
格式字符串实际上不是普通的Python格式字符串。您必须始终对所有字段使用%s我在上找到了解决方案。简而言之,在
.execute()的第二个参数中使用dict
,而不是tuple
:
add_salary=(“插入薪资”
(emp编号、工资、从日期到日期)
“值(%(员工编号)、%(工资)s、%(自日期起)s、%(至日期起)s)”)
数据_工资={
“emp_no”:emp_no,
“工资”:50000美元,
“开始日期”:明天,
“截止日期”:日期(9999,1,1),
}
cursor.execute(添加薪资、数据薪资)
您缺少一个%
和)
-.execute(“插入表值(%d,%s)”%(int(id),string))
很抱歉,这被否决了,但这是一个前进的方向。(“插入表值(%d,“%s”)””%(int(id),string))
您应该编辑它。谢谢。养成在游标上使用参数的习惯要安全得多。执行函数以消除注入风险:我在Python2.7上收到过类似语法的错误。至少在我这边,如果需要参数化的%s,我的python需要一个字符串值,我必须将其转换为类似字符串的str(someVal)。@Kickass-您可能需要检查是否有一个字符串插值运算符(%)来分隔SQL插入字符串和值元组,而不是逗号。