gpt4 book ai didi

python - pyodbc.ProgrammingError : ('42000' , "[42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]附近的语法不正确

转载 作者:行者123 更新时间:2023-12-04 13:28:46 25 4
gpt4 key购买 nike

我正在使用 python 3.9 使用 pyobc 将多个新闻列表从 google rss 新闻插入到带有参数的 SQL 表,但总是在下面出现编程错误:

cursor.execute(query) pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '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 的数据库。
这种方法不仅可以安全地转义用户提交的值,还可以避免因特殊字符(例如每个案例的重音符号甚至字符串中的引号)而损坏。此外,您还可以提高代码的可读性、可维护性和可以说的效率。甚至考虑 executemany :

# PREPARED STATEMENT (NO DATA)
query = "insert into news2 (Title, Source1, Time1) values (?, ?, ?)"

# LIST OF TUPLES FOR PARAMS
data = [(news.title.text, news.source.text, news.pubDate.text) for news in newslist]

# EXECUTE STATEMENT AND BIND PARAMS
cursor.executemany(query, data)
cursor.commit()

关于python - pyodbc.ProgrammingError : ('42000' , "[42000] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66479617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com