python - 在以下示例中,在 python 中插入语句到 mysql 中的错误是什么?
问题描述
我正在尝试抓取网站然后从该网站检索数据并使用 python 3 将数据插入到 mysql 中,我想在表中插入的数据是 tuble 并且我实现get_article_details
了函数,它正确地生成数据。但是我在插入语句中有一个问题,如下所示:
import pymysql
conn=pymysql.connect(host='localhost',port=3306,user='root',password='')
cur=conn.cursor()
def save_data(data):
cur.execute("insert into shereen.articles values" +str(data))
conn.commit()
print(data[0]+" -->>saved")
def get_article_details(url):
r=requests.get(url)
soup=BeautifulSoup(r.text)
title=soup.title.text
image=soup.find('div',attrs={"class":"articleimg"}).find('img')['src']
writer=soup.find('div',attrs={"class":'pinfo'}).find('a').text
article_date=soup.find('div',attrs={"class":'pinfo'}).find('span').text.replace("|"," ").strip()
body=soup.find('div',attrs={'id':'NewsStory'})
body.find('div',attrs={"class":'smsBoxContainer-v1'}).decompose()
body.find('div',attrs={"class":'min_related'}).decompose()
body.find('div',attrs={"class":'CoronaContainer inner noPaddding'}).decompose()
article=[]
for section in body.findAll('p'):
article.append(section.text)
article=''.join(article)
keywords=soup.find('meta',attrs={'name':'keywords'})['content']
data=(url,title,image,writer,article_date,article,keywords)
save_data(data)
return data
并出现以下错误:
TypeError Traceback (most recent call last)
<ipython-input-125-026157a57db9> in <module>
----> 1 get_article_details("https://www.almasryalyoum.com/news/details/1994354")
<ipython-input-124-42023343dc13> in get_article_details(url)
16 keywords=soup.find('meta',attrs={'name':'keywords'})['content']
17 data=(url,title,image,writer,article_date,article,keywords)
---> 18 save_data(data)
19 return data
20
<ipython-input-123-5db81833f7e7> in save_data(data)
4 def save_data(data):
5
----> 6 cur.execute("insert into shereen.articles values" ,str(data))
7 conn.commit()
8 print(data[0]+" -->>saved")
~\anaconda3\lib\site-packages\pymysql\cursors.py in execute(self, query, args)
166 pass
167
--> 168 query = self.mogrify(query, args)
169
170 result = self._query(query)
~\anaconda3\lib\site-packages\pymysql\cursors.py in mogrify(self, query, args)
145
146 if args is not None:
--> 147 query = query % self._escape_args(args, conn)
148
149 return query
TypeError: not all arguments converted during string formatting
解决方案
值列表应该用括号括起来,并且需要引用字符串(如果有)。
最重要的是,您确实想使用参数:
cur.execute('''insert into shereen.articles
(url,title,image,writer,article_date,article,keywords)
values(?, ?, ?, ?, ?, ?, ?)''', data)
请注意,我(试图)枚举insert
语句中的目标列。这是 SQL 中的最佳实践,它使语句更易于调试、更灵活并且以某种方式对目标表的 DML 更改具有弹性。
推荐阅读
- python - 如何使用 abaqus python 脚本运行多个作业?
- python - 使用 keras 自定义循环分配策略范围
- python - 操作列表列表中的值 Python
- c++ - 构建聚合 CMake 项目
- xml - VBNET 中的 XML 发布请求
- python - Python Anywhere Flask ImportError:尝试在没有已知父包的情况下进行相对导入
- reactjs - 在 NextJS/React 中渲染 markdown 的问题
- java - Lottie 错误 java.lang.IllegalStateException:无法解析组合
- arrays - 将数据从导航控制器中呈现的视图传递回自定义视图 (XIB)
- python - 命令声称需要参数