我正试图做某事:
try:
database_insert_1() # insert sth to table_1
database_insert_2() # insert sth to table_2
except Exception as e:
print(e.message)
我希望database_insert_1
和database_insert_2
仅在它们都可以成功运行时才执行。
我在上面的操作方式将带来一个问题,即使只有database_insert_1
失败,database_insert_2
仍将成功执行。
用例是两个表共享相同的架构,我希望这两个表是一致的,并且不希望只有其中一个被更新。
如何解决以上问题?非常感谢。
答案 0 :(得分:0)
您可以稍稍修改您的代码即可使用,需要使其更具层次感:
import scrapy
class CBNCSpider(scrapy.Spider):
name = 'kontan'
start_urls = [
'https://investasi.kontan.co.id/rubrik/28/Emiten'
]
def parse(self, response):
for crawl in response.xpath("//*[@id='list-news']//*[@class='ket']"):
d = {}
d['title'] = crawl.css("h1 > a::text").get()
d['source'] = response.urljoin(crawl.css("h1 > a::attr(href)").get())
d['date'] = crawl.css("span.font-gray::text").get().strip("|")
yield scrapy.Request(
url=d['source'],
callback=self.parseparagraph,
meta={'item':d}
)
def parseparagraph(self, response):
items_old = response.meta['item']
items_old['paragraph'] = response.xpath("//p/text()").getall()
yield items_old
答案 1 :(得分:0)
例如,如果您使用sql数据库,则将游标传递到函数中,而不在插入函数中提交
cursor = conn.cursor()
try:
database_insert_1(cursor) # insert sth to table_1
database_insert_2(cursor) # insert sth to table_2
cursor.commit
except Exception as e:
print(e.message)
因此,如果您在任何一个函数中均出错,那么它将跳至异常,并且不会更新任何数据库。