错误提示如下:Traceback (most recent call last):
File "src\pymssql\_pymssql.pyx", line 458, in pymssql._pymssql.Cursor.execute
File "src\pymssql\_mssql.pyx", line 1086, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1117, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql\_mssql.pyx", line 1250, in pymssql._mssql.MSSQLConnection.format_and_run_query
File "src\pymssql\_mssql.pyx", line 1788, in pymssql._mssql.check_cancel_and_raise
File "src\pymssql\_mssql.pyx", line 1834, in pymssql._mssql.raise_MSSQLDatabaseException
pymssql._mssql.MSSQLDatabaseException: (102, b"Incorrect syntax near '\xe2\x80\x98'.DB-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 "c:\Users\Admin\Desktop\2022_9_15_Python_connect_SQL_server_2_insert.py", line 8, in <module>
cursor_1.execute(SQL_insert)
File "src\pymssql\_pymssql.pyx", line 475, in pymssql._pymssql.Cursor.execute
pymssql._pymssql.ProgrammingError: (102, b"Incorrect syntax near '\xe2\x80\x98'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")
这个问题出现的时候很奇怪,说我的cursor_1.execute出错了,问题定位在这,可是反复比对确实没问题。然后我将SQL的代码复制到一个做删除操作(delete)的py文件中,原先可以用的py文件也报了相同的错误。我以为是编写的SQL代码错了,然后就手动输入(划重点)在SQL server中,在SQL management中运行SQL的插入语句,发现没问题,然后我又将SQL management中的SQL语句复制到可以用的删除操作的py文件中,以此把删除操作编程插入操作,奇怪了,竟然没报错。但运行之前的插入操作的py文件还是会报错。
网上查了会资料,有说是host的内容处多了个空格的,我看了看,发现没问题,忽然想到,难道真的是书写错误?平心静气看了一会后发现,果真,是SQL语句中第一个英制引号被我写成了中文引号。Python的代码逻辑上肯定没问题,语法上也没问题,但是那个SQL语句被送到SQL中去执行时,SQL会报错,报错后就无法返回插入后的结果,无法返回结果至Python,Python往后的代码也无法运行,于是Python报错,报错原因正是execute执行函数在执行后无法返回结果,错误也就定位在了cursor_1.execute()函数上。
总结一下就是,运用pymssql对SQL server进行操作时,如果代码逻辑没问题,语法没问题,单词也没有拼错,但是还是遇到了像文中代码显示的那样的错误,可能问题出在了SQL的操作上。可以检查一下你引号中的SQL语句在SQL server management中能不能运行,即你手动输入的SQL语句是不是哪里写错了,比如引号、比如是否加了多余的逗号或句点?
如下图
解决办法就是,将这个错误的引号纠正就可以了,问题便会解决。
写在最后
如果解决了你长久以来的困惑,记得点赞评论收藏哦~
如果解决了你的燃眉之急,荣幸之至,还请记得赞赏哟~