关于pymssql 向SQLserver数据库的插入数据的时候出现105问题 mssql.MSSQLDatabaseException: (105, b"Unclosed quotation mark

此问题借助了这篇博客:
https://blog.csdn.net/dadaowuque/article/details/80998990

win10 + python3.6.5+pycharm+pymmsql
在向数据库中插入数据的时候报错如下

Traceback (most recent call last):              
  File "src\pymssql.pyx", line 448, in pymssql.Cursor.execute               
  File "src\_mssql.pyx", line 1064, in _mssql.MSSQLConnection.execute_query             
  File "src\_mssql.pyx", line 1095, in _mssql.MSSQLConnection.execute_query             
  File "src\_mssql.pyx", line 1228, in _mssql.MSSQLConnection.format_and_run_query              
  File "src\_mssql.pyx", line 1639, in _mssql.check_cancel_and_raise                
  File "src\_mssql.pyx", line 1683, in _mssql.maybe_raise_MSSQLDatabaseException                
_mssql.MSSQLDatabaseException: (105, b"Unclosed quotation mark after the character string '<p>\xe8\xa1\x8c\xe6\x94\xbf\xe5\xa4\x84\xe7\xbd\x9a\xe5\x86\xb3\xe5\xae\x9a\xe4\xb9\xa6\xe6\x96\x87\xe5\x8f\xb7\xef\xbc\x9a\xe4\xb9\x89\xe5\xb8\x82\xe7\x9b\x91\xe7\xbd\x9a\xe5\xad\x97\xe3\x80\x942016\xe3\x80\x9501501\xe5\x8f\xb7\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe6\xa1\x88\xe4\xbb\xb6\xe5\x90\x8d\xe7\xa7\xb0\xef\xbc\x9a\xe4\xb9\x89\xe4\xb9\x8c\xe6\xac\xa7\xe9\xa3\x8e\xe6\xb1\xbd\xe8\xbd\xa6\xe7\x94\xa8\xe5\x93\x81\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8\xe4\xbb\xa5\xe4\xb8\x8d\xe5\x90\x88\xe6\xa0\xbc\xe4\xba\xa7\xe5\x93\x81\xe5\x86\x92\xe5\x85\x85\xe5\x90\x88\xe6\xa0\xbc\xe4\xba\xa7\xe5\x93\x81\xe6\xa1\x88\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe8\xa2\xab\xe5\xa4\x84\xe7\xbd\x9a\xe5\xaf\xb9\xe8\xb1\xa1\xe5\x90\x8d\xe7\xa7\xb0\xef\xbc\x9a\xe4\xb9\x89\xe4\xb9\x8c\xe6\xac\xa7\xe9\xa3\x8e\xe6\xb1\xbd\xe8\xbd\xa6\xe7\x94\xa8\xe5\x93\x81\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe8\xa2\xab\xe5\xa4\x84\xe7\xbd\x9a\xe5\x8d\x95\xe4\xbd\x8d\xe6\xb3\x95\xe5\xae\x9a\xe4\xbb\xa3\xe8\xa1\xa8\xe4\xba\xba\xe5\xa7\x93\xe5\x90\x8d\xef\xbc\x9a\xe7\xab\xa5\xe6\x98\x8c\xe5\xae\x9d\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe4\xb8\xbb\xe8\xa6\x81\xe8\xbf\x9d\xe6\xb3\x95\xe4\xba\x8b\xe5\xae\x9e\xef\xbc\x9a\xe7\xbb\x8f\xe6\x9f\xa5\xe6\x98\x8e\xef\xbc\x9a\xe5\xbd\x93\xe4\xba\x8b\xe4\xba\xba\xe4\xb9\x89\xe4\xb9\x8c\xe6\xac\xa7\xe9\xa3\x8e\xe6\xb1\xbd\xe8\xbd\xa6\xe7\x94\xa8\xe5\x93\x81\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8\xe4\xba\x8e2015\xe5\xb9\xb43\xe6\x9c\x8828\xe5\x8f\xb7\xe4\xbb\x8e\xe5\xb9\xbf\xe5\xb7\x9e\xe8\xb4\xad\xe4\xb9\xb0\xe7\x8e\xbb\xe7\x92\x83\xe6\xb5\x93\xe7\xbc\xa9\xe6\xb6\xb2\xe7\x81\x8c\xe8\xa3\x85\xe4\xba\x86400\xe7\x93\xb6\xe7\x94\x9f\xe4\xba\xa7\xe6\x97\xa5\xe6\x9c\x9f\xe6\x89\xb9\xe5\x8f\xb7\xef\xbc\x9a2015/03/28'.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")             

During handling of the above exception, another exception occurred:             

Traceback (most recent call last):              
  File "G:/下载/Demo3/标题落款/odbc6.py", line 148, in <module>               
    cur.execute(sql2)               
  File "src\pymssql.pyx", line 468, in pymssql.Cursor.execute               
pymssql.OperationalError: (105, b"Unclosed quotation mark after the character string '<p>\xe8\xa1\x8c\xe6\x94\xbf\xe5\xa4\x84\xe7\xbd\x9a\xe5\x86\xb3\xe5\xae\x9a\xe4\xb9\xa6\xe6\x96\x87\xe5\x8f\xb7\xef\xbc\x9a\xe4\xb9\x89\xe5\xb8\x82\xe7\x9b\x91\xe7\xbd\x9a\xe5\xad\x97\xe3\x80\x942016\xe3\x80\x9501501\xe5\x8f\xb7\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe6\xa1\x88\xe4\xbb\xb6\xe5\x90\x8d\xe7\xa7\xb0\xef\xbc\x9a\xe4\xb9\x89\xe4\xb9\x8c\xe6\xac\xa7\xe9\xa3\x8e\xe6\xb1\xbd\xe8\xbd\xa6\xe7\x94\xa8\xe5\x93\x81\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8\xe4\xbb\xa5\xe4\xb8\x8d\xe5\x90\x88\xe6\xa0\xbc\xe4\xba\xa7\xe5\x93\x81\xe5\x86\x92\xe5\x85\x85\xe5\x90\x88\xe6\xa0\xbc\xe4\xba\xa7\xe5\x93\x81\xe6\xa1\x88\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe8\xa2\xab\xe5\xa4\x84\xe7\xbd\x9a\xe5\xaf\xb9\xe8\xb1\xa1\xe5\x90\x8d\xe7\xa7\xb0\xef\xbc\x9a\xe4\xb9\x89\xe4\xb9\x8c\xe6\xac\xa7\xe9\xa3\x8e\xe6\xb1\xbd\xe8\xbd\xa6\xe7\x94\xa8\xe5\x93\x81\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe8\xa2\xab\xe5\xa4\x84\xe7\xbd\x9a\xe5\x8d\x95\xe4\xbd\x8d\xe6\xb3\x95\xe5\xae\x9a\xe4\xbb\xa3\xe8\xa1\xa8\xe4\xba\xba\xe5\xa7\x93\xe5\x90\x8d\xef\xbc\x9a\xe7\xab\xa5\xe6\x98\x8c\xe5\xae\x9d\xef\xbc\x9b<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\xe4\xb8\xbb\xe8\xa6\x81\xe8\xbf\x9d\xe6\xb3\x95\xe4\xba\x8b\xe5\xae\x9e\xef\xbc\x9a\xe7\xbb\x8f\xe6\x9f\xa5\xe6\x98\x8e\xef\xbc\x9a\xe5\xbd\x93\xe4\xba\x8b\xe4\xba\xba\xe4\xb9\x89\xe4\xb9\x8c\xe6\xac\xa7\xe9\xa3\x8e\xe6\xb1\xbd\xe8\xbd\xa6\xe7\x94\xa8\xe5\x93\x81\xe6\x9c\x89\xe9\x99\x90\xe5\x85\xac\xe5\x8f\xb8\xe4\xba\x8e2015\xe5\xb9\xb43\xe6\x9c\x8828\xe5\x8f\xb7\xe4\xbb\x8e\xe5\xb9\xbf\xe5\xb7\x9e\xe8\xb4\xad\xe4\xb9\xb0\xe7\x8e\xbb\xe7\x92\x83\xe6\xb5\x93\xe7\xbc\xa9\xe6\xb6\xb2\xe7\x81\x8c\xe8\xa3\x85\xe4\xba\x86400\xe7\x93\xb6\xe7\x94\x9f\xe4\xba\xa7\xe6\x97\xa5\xe6\x9c\x9f\xe6\x89\xb9\xe5\x8f\xb7\xef\xbc\x9a2015/03/28'.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")              

Process finished with exit code 1               

没有任何语句错误,抛开全文这个字段向数据库插入的时候也能通过,发现问题出在全文这个字段这里。 但是使用sql server单独插入也能通过。
经查阅网上的回答如下

通常遇到这个错是因为 sql 字符串中少了一个单引号的原因,但是还有一个类特别隐蔽的问题:sql的值中的字符串里边带有 \x00 和 \u0000的截止符。这类符号会导致 pymssql 处理不到后边的单引号。解决方法是去掉这类的字符:

解决如下:

try:    
    str1 = str1.replace('\u0000', '').replace('\x00', '')   
except Exception:   
    str1 = str1 

其中str1是我经过处理后需要向数据库插入时全文字段内容保存的变量名。
问题解决!!!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值