Python pyodbc.ProgrammingError:(';42000';,“42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]附近语法不正确

Python pyodbc.ProgrammingError:(';42000';,“42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]附近语法不正确,python,sql-server,beautifulsoup,pyodbc,Python,Sql Server,Beautifulsoup,Pyodbc,我正在使用python 3.9将google rss news中的多条新闻列表插入到SQL表中,并使用pyobc参数,但总是出现以下编程错误: cursor.execute(query)pyodbc.programming错误:('42000',“[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]在'cò'附近的语法不正确 (102)(SQLExecDirectW)“) 我检查了sql表,发现实际上有些记录已成功导入sql(15条记录),但不是

我正在使用python 3.9将google rss news中的多条新闻列表插入到SQL表中,并使用pyobc参数,但总是出现以下编程错误:

cursor.execute(query)pyodbc.programming错误:('42000',“[42000][Microsoft][ODBC SQL Server驱动程序][SQL Server]在'cò'附近的语法不正确 (102)(SQLExecDirectW)“)

我检查了sql表,发现实际上有些记录已成功导入sql(15条记录),但不是所有记录(30条记录)

下面是我所有的代码,请帮忙

import bs4
from bs4 import BeautifulSoup as soup
from urllib.request import urlopen
import pyodbc

news_url="https://news.google.com/rss?hl=vi&gl=VN&ceid=VN:vi"
Client=urlopen(news_url)
xml_page=Client.read()
Client.close()
soup_page=soup(xml_page,"xml")
news_list=soup_page.findAll("item")

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=ADMIN;DATABASE=NewsCollect2')
cursor = cnxn.cursor()

for news in news_list:
    query = f"insert into news2(Title,Source1,Time1) values (N'"+news.title.text+"',N'"+news.source.text+"',N'"+news.pubDate.text+"')"
    cursor.execute(query)
    cursor.commit()
cursor.close()
cnxn.close()

p/s我尝试提取到txt文件,效果非常好。

正如@PanagiotisKanavos所评论的,使用业界推荐的SQL参数化最佳实践,它超越了Python和SQL Server,而是任何应用层代码和任何符合SQL的数据库

该方法不仅安全地避免了用户提交的值,还避免了特殊字符的破损,例如每一种情况下的重音标记,甚至字符串中的引号。此外,还增强了代码的可读性、可维护性和可论证的效率。甚至考虑<代码>执行程序< /代码>:

#准备好的报表(无数据)
query=“插入新闻2(标题、源1、时间1)值(?,,?)”
#参数的元组列表
数据=[(news.title.text、news.source.text、news.pubDate.text)用于新闻列表中的新闻]
#执行语句并绑定参数
cursor.executemany(查询、数据)
cursor.commit()

猜一猜如果有人进入会发生什么事(
);删除表用户--。不要通过连接用户数据来创建查询。再多的引用或清理都不会保护您免受SQL注入的影响。使用@Panagiotis Kanavos更安全、更容易,因为它起作用了。你救了我一天。非常感谢你!