使用 Scrapy 时如何将多个项目插入数据库?
How to insert multiple items into database when using Scrapy?
现在大多数数据库都支持在一个数据库中插入多条记录运行。这比一条一条地插入记录要快得多,因为只需要一个事务。 SQL 语法类似于:
INSERT INTO tbl_name (a,b,c)
VALUES(1,2,3), (4,5,6), (7,8,9);
现在我在一个小项目上使用 Python Scrapy。我使用它的项目管道将抓取的数据存储到数据库中。但是,项目管道背后的逻辑是将在每个项目上调用相关方法。所以它总是一次插入一个项目。我怎样才能收集大约 100 个项目并将它们插入一个 运行?
您需要将管道重构为如下形式:
class DatabasePipeline(object):
def open_spider(self, spider):
#Create database connection
...
#create items list
self.items = []
def process_item(self,item,spider):
self.items.append(item)
if len(self.items)==100:
#constuct SQL query to insert multiple records
...
#execute query and clean self.items
self.items = []
return item
def close_spider(self,spider):
#insert remaining records
if self.items:
#constuct SQL query to insert multiple records
...
#execute query
#close database connection
现在大多数数据库都支持在一个数据库中插入多条记录运行。这比一条一条地插入记录要快得多,因为只需要一个事务。 SQL 语法类似于:
INSERT INTO tbl_name (a,b,c)
VALUES(1,2,3), (4,5,6), (7,8,9);
现在我在一个小项目上使用 Python Scrapy。我使用它的项目管道将抓取的数据存储到数据库中。但是,项目管道背后的逻辑是将在每个项目上调用相关方法。所以它总是一次插入一个项目。我怎样才能收集大约 100 个项目并将它们插入一个 运行?
您需要将管道重构为如下形式:
class DatabasePipeline(object):
def open_spider(self, spider):
#Create database connection
...
#create items list
self.items = []
def process_item(self,item,spider):
self.items.append(item)
if len(self.items)==100:
#constuct SQL query to insert multiple records
...
#execute query and clean self.items
self.items = []
return item
def close_spider(self,spider):
#insert remaining records
if self.items:
#constuct SQL query to insert multiple records
...
#execute query
#close database connection