使用 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