已解决Python向数据库插入数据的字符串中含有单引号或双引号报错:(102, b"Incorrect syntax near ‘S’.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\nDB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")


文章目录

  • 报错代码
  • 报错原因
  • 解决方法1
  • 解决方法2
  • 解决方法3
  • 解决方法4(推荐)
  • 千人全栈VIP答疑群联系博主帮忙解决报错

报错代码

最近处理部分数据,某些字段的数据中,含有一个单引号入库是会报错,报错代码如下:

sql = "insert into TM_DATA (a,b,c) VALUES ('%s','%s','%s')" % data

打印拼接好的报错SQL如下:

insert into TM_DATA (a,b,c) VALUES ('22609132','3','MEMORIES OF BEGINNER'S MIND')

检查语句时发现,文件中数据有个’单引号:

尝试手动把单引号换成双引号后,在数据库运行依旧报错:

报错原因

报错原因

对于这个问题,错误原因就是因为单引号是作为数据库字符串的标识的,因此,当字符串中有单引号号时,通过python入库时,原本的一个字符串会分割为多个字符串。因此就是要想办法将这些分割的字符串重新拼接起来。

解决方法1

将单引号替换为空,如下代码中示例,变量a存储的信息,将其替换后就可以按照常规的入库操作即可。

a = a.replace("'","") # 进行替换

解决方法2

在对这个sql的写法进行一个改变,在python中可以使用三对双引号来表示字符串,然后sql语法中的引号使用双引号,插入字符串中的引号使用单引号就不会出现破坏sql语法的问题。:

sql = """insert into TM_DATA (a,b,c) VALUES ("%s","%s","%s")""" % data

解决方法3

pymysql中有专门的转义方法,使用时只需要先将特定的字符串进行转义,然后再将转义后的字符串插入到数据库中即可,代码示例如下:

# v1.0.0及以上
from pymysql.converters import escape_string# v0.10.1及以下
from pymysql import escape_string# data为含有单引号或者双引号的字符串
data = escape_string(data)

解决方法4(推荐)

用pandas入库,不用写SQL语句就可以直接存:

engine = sqlalchemy.create_engine('mssql+pymssql://账号:密码@服务器地址:端口号/库名')
if len(df) - 1 < 2000:df.to_sql("表名", con=engine, if_exists="append", index=False, chunksize=10000)
else:start = 0for i in range(0, len(df), 2000):end = idfn = df.loc[start:end]# print(dfn)dfn.to_sql("表名", con=engine, if_exists="append", index=False, chunksize=10000)# print("入库2000行...")start = end + 1dfn = df.loc[start:len(df) - 1]dfn.to_sql("表名", con=engine, if_exists="append", index=False, chunksize=10000)

以上是此问题报错原因的解决方法,欢迎评论区留言讨论是否能解决,如果有用欢迎点赞收藏文章谢谢支持,博主才有动力持续记录遇到的问题!!!

千人全栈VIP答疑群联系博主帮忙解决报错

由于博主时间精力有限,每天私信人数太多,没办法每个粉丝都及时回复,所以优先回复VIP粉丝,可以通过订阅限时9.9付费专栏《100天精通Python从入门到就业》进入千人全栈VIP答疑群,获得优先解答机会(代码指导、远程服务),白嫖80G学习资料大礼包,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点:作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会),此专栏文章是专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试!

  • 专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等

  • 注意:如果希望得到及时回复,订阅专栏后私信博主进千人VIP答疑群

免费资料获取,更多粉丝福利,关注下方公众号获取

已解决Python向数据库插入数据的字符串中含有单引号或双引号报错相关推荐

  1. java程序单引号报错_JavaScript中的单引号和双引号报错的解决方法

    在使用JavaScript显示消息或者传递字符数据的时候,经常会碰到数据中夹杂单引号(')或者双引号("),这种语句往往会造成JavaScript报错.对此一般采用/'或者/"的解 ...

  2. python创建包含双引号的字符串代码_python 字符串组成MySql 命令时,字符串含有单引号或者双引号导致出错解决办法...

    引用自:https://blog.csdn.net/zhaoya_huangqing/article/details/48036839 一.在组成SQL语句并发送命令时完全按照Python中的样式去传 ...

  3. python代码什么时候用单引号_Python 中的单引号和双引号有什么区别?

    在Python当中可以使用单引号,也可以使用双引号,那两者有什么区别吗? 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式,除了可以简化程序 ...

  4. Python中的单引号和双引号 的使用有什么区别

    在Python当中表达字符串既可以使用单引号,也可以使用双引号 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式,除了可以简化程序员的开发, ...

  5. Python中的单引号和双引号是否存在区别

    在使用Python的过程中,一直在记着input中使用单引号,print中使用双引号,还经常搞混,会出错, name = input('请输入你的姓名:') print("你好," ...

  6. python中的单引号和双引号的区别

    python中的单引号和双引号的区别 今天在码代码的过程中突然想到这个问题,于是上网浏览了一下,发现在python中两种表达方式是没有区别的,两种表达方式都可以用来表达一个字符串.但是这两种通用的表达 ...

  7. python中的单引号和双引号有什么区别_Python 中的单引号和双引号有什么区别?...

    在Python当中表达字符串既可以使用单引号,也可以使用双引号,那两者有什么区别吗? 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式,除了 ...

  8. Python中的单引号、双引号、三引号

    在Python中,引号内的内容都是字符串类型的.而引号又有单引号.双引号.三引号,具体的用法以及注意点如下: 一.单引号.双引号交叉使用 单引号和双引号都是用来表示字符串,在一般情况下两者没有任何差别 ...

  9. python单引号双引号三引号_python中的单引号、双引号和三引号有何区别

    单引号和双引号 在Python中我们都知道单引号和双引号都可以用来表示一个字符串,比如str1 = 'python' str2 = "python" str1和str2是没有任何区 ...

最新文章

  1. 关于flink的日志文件设置
  2. java console 交互_实例讲解java中Console类的用法
  3. springboot配置对jsp页面的解析支持
  4. javaWeb Note1
  5. Apache JMeter--网站自动测试与性能测评
  6. element-ui中表单验证rules
  7. 火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍
  8. 初步使用计算机说课,初步认识计算机说课稿
  9. Session自定义存储及分布式存储
  10. 关于 Google“博客搜索”Ping 服务应用编程接口(API)
  11. java简历的专业技能,java程序员专业技能简历范文
  12. 2021年【CSDN毎周小结】
  13. 集成安装光盘制作教程(http://bbs.deepin.org/viewthread.php?tid=1170144)
  14. vue获取地址栏参数
  15. 堪称懒人神器?Reno5新配色一键美妆功能,素颜出镜也不怕
  16. 概率论与数理统计,基础知识、公式、定理、概念(一)
  17. 超透镜仿真案例(2)—— 宽带消色差 超构透镜模型 FDTD仿真超表面
  18. ModuleNotFoundError: No module named ‘_lzma‘
  19. 华硕天选3和神舟战神Z8那个好?
  20. R语言七天入门教程六:文件相关操作

热门文章

  1. 波士顿动力公司改造大狗机器人,摇身一变“驯鹿”拉雪橇!
  2. Vue 点击事件获取当前元素
  3. 软件工程大作业---《苕皮段子》段子笑话APP
  4. Vijos 1007 饶钉子的长绳子
  5. stm32 语音播报
  6. 5500美元/完整GK110:世界最强超算加速卡 2013
  7. android 5.0跳转动画,android Lollipop(5.0)--activity跳转动画
  8. Spring 管理对象
  9. 计算机能换显卡吗,笔记本显卡能换吗?笔记本换显卡的方法
  10. css div 下拉框内容自适应,div+css模拟select下拉框