python使用插入带有%的字符串到mysql数据库
【摘要】 使用Navicat插入
新建包含两个字段,分别是id(自增主键),name(姓名)的数据表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` `varchar`(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB...
使用Navicat插入
新建包含两个字段,分别是id(自增主键),name(姓名)的数据表
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` `varchar`(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 1
- 2
- 3
- 4
- 5
在Navicat中使用原生sql直接插入100%
insert into student(name) VALUES ('100%')
- 1
返回
Affected rows: 1, Time: 0.001000s
- 1
数据库查看,确实插入了
使用python插入
使用peewee模块链接数据库
import peewee
db = peewee.MySQLDatabase( host="localhost", port=3306, user="root", password="123456", database="demo",
)
db.execute_sql("insert into student(name) VALUES ('100%')")
db.close()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
报错:
TypeError: not enough arguments for format string
- 1
可以看出%
被格式化字符占用了
解决方法:
1、将sql语句改为
db.execute_sql("insert into student(name) VALUES ('100%%')")
- 1
将%
转义之后就可以正常插入了, 使用%s
格式化和 format
格式化效果是一样的
这样有个不好的地方,每次传递的参数都需要做修改
2、 execute_sql
还有一个参数params
,接收一个元组
db.execute_sql("insert into student(name) VALUES (%s)", ("1000%",))
- 1
这样也能执行成功,推荐使用此方法,而且还能防止sql注入攻击
tips
: peewee的数据库链接使用完后需要手动关闭下,加一个close
,不然会一直占用连接
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/81102488
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)