在下面的示例中,python中的insert语句到mysql中的错误是什么?
我正在尝试对网站进行爬网,然后从该网站检索数据,并使用python 3将数据插入mysql表中,我想在表中插入的数据是tuble,我实现了在下面的示例中,python中的insert语句到mysql中的错误是什么?,python,mysql,sql,sql-insert,Python,Mysql,Sql,Sql Insert,我正在尝试对网站进行爬网,然后从该网站检索数据,并使用python 3将数据插入mysql表中,我想在表中插入的数据是tuble,我实现了get_article_details函数,它正确地生成了数据。但我在insert语句中遇到以下问题: import pymysql conn=pymysql.connect(host='localhost',port=3306,user='root',password='') cur=conn.cursor() def save_data(data):
get_article_details
函数,它正确地生成了数据。但我在insert语句中遇到以下问题:
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
TypeError回溯(最近一次调用)
在里面
---->1获取文章详细信息(“https://www.almasryalyoum.com/news/details/1994354")
在获取文章详细信息(url)中
16关键字=soup.find('meta',attrs={'name':'keywords'})['content']
17数据=(url、标题、图像、作者、文章日期、文章、关键字)
--->18保存数据(数据)
19返回数据
20
在保存数据(数据)中
4 def保存_数据(数据):
5.
---->6 cur.execute(“插入shereen.articles值”,str(数据))
7康涅狄格州提交
8打印(数据[0]+“-->>已保存”)
执行中的~\anaconda3\lib\site packages\pymysql\cursors.py(self、query、args)
166通行证
167
-->168 query=self.mogrify(query,args)
169
170结果=self.\u查询(查询)
mogrify中的~\anaconda3\lib\site packages\pymysql\cursors.py(self、query、args)
145
146如果args不是None:
-->147 query=query%self.\u escape\u args(args,conn)
148
149返回查询
TypeError:在字符串格式化过程中并非所有参数都已转换
值列表应该用括号括起来,字符串(如果有)需要加引号
总之,您确实希望使用参数:
cur.execute('''insert into shereen.articles
(url,title,image,writer,article_date,article,keywords)
values(?, ?, ?, ?, ?, ?, ?)''', data)
注意,我(试图)枚举
insert
语句中的目标列。这是SQL中的最佳实践,它使语句更易于调试,更灵活,并且在某种程度上适应目标表的DML更改。值列表应该用括号括起来,字符串(如果有)需要引用
总之,您确实希望使用参数:
cur.execute('''insert into shereen.articles
(url,title,image,writer,article_date,article,keywords)
values(?, ?, ?, ?, ?, ?, ?)''', data)
注意,我(试图)枚举
insert
语句中的目标列。这是SQL中的最佳实践,它使语句更易于调试,更灵活,并且在某种程度上对目标表的DML更改具有弹性。出现了另一个错误,TypeError:不是在字符串格式化过程中转换的所有参数出现了另一个错误,TypeError:不是在字符串格式化过程中转换的所有参数