insert_sql = "INSERT INTO user(name, id, password) VALUES ('%s', '%d', '%s')" % (name, id, pwd) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ TypeError: %d format: a real number is required, not str为什么报这个错,应该怎么改
时间: 2023-07-07 14:44:29 浏览: 81
这个错误是因为在格式化字符串时,使用了 %d 格式化指令,但是传入的并不是实数而是字符串,所以会报错。要解决这个问题,可以将传入的 id 转为整数,例如:
```
insert_sql = "INSERT INTO user(name, id, password) VALUES ('%s', %d, '%s')" % (name, int(id), pwd)
```
这样就可以将 id 转为整数,避免了报错。另外,为了避免 SQL 注入等安全问题,建议使用参数化查询或者 ORM 框架等方式进行数据库操作。
相关问题
insert_sql = "INSERT INTO user(id, name, sex, age, phonenumber, banji, password) VALUES ('%d', '%s', " \ "'%s', '%d', '%d', '%s', '%s')" % (int(id), name, sex, int(age), int(phonenumber), banji, pwd)哪错了,怎么改
这段代码可能存在 SQL 注入漏洞,建议使用参数化查询来避免此类漏洞。以下是使用参数化查询的示例代码:
```
insert_sql = "INSERT INTO user(id, name, sex, age, phonenumber, banji, password) VALUES (%s, %s, %s, %s, %s, %s, %s)"
values = (int(id), name, sex, int(age), int(phonenumber), banji, pwd)
cursor.execute(insert_sql, values)
```
在这个示例代码中,我们使用 `%s` 作为占位符,而不是直接在 SQL 语句中拼接变量。然后,我们将变量作为元组传递给 `cursor.execute()` 方法。这种方式可以防止 SQL 注入攻击。
insert_sql = "INSERT INTO user(id, name, sex, age, phonenumber, banji, password) VALUES (%d, %s, %s, %d, " \ "%d, %s, %s)" % (int(id), str(name), str(sex), int(age), int(phonenumber), str(banji), str(pwd))插入语句这么写,数据库里面的类型也都是int或者varchar,为什么用户输入中文时,性别单独输入男或女,班级只输入中文会报错,说不在field list 中
在这个插入语句中,字符串类型的值需要使用单引号括起来。因此,您可以尝试以下更改:
```
insert_sql = "INSERT INTO user(id, name, sex, age, phonenumber, banji, password) VALUES (%d, '%s', '%s', %d, %d, '%s', '%s')" % (int(id), str(name), str(sex), int(age), int(phonenumber), str(banji), str(pwd))
```
在这个更改后的插入语句中,字符串类型的值都使用了单引号括起来,这样就可以正确地插入中文字符串了。
阅读全文