Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQLdb Python插入%d和%s_Python_Mysql_Mysql Python - Fatal编程技术网

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插入字符串和值元组,而不是逗号。