【问题标题】:How to insert multiple items into database when using Scrapy?使用 Scrapy 时如何将多个项目插入数据库?
【发布时间】:2020-10-09 18:17:27
【问题描述】:

如今,大多数数据库都支持一次将多条记录插入数据库。这比一个一个地插入记录要快得多,因为只需要一个事务。 SQL 语法与此类似:

INSERT INTO tbl_name (a,b,c)
VALUES(1,2,3), (4,5,6), (7,8,9);

现在我在一个小项目上使用 Python Scrapy。我使用它的项目管道将抓取的数据存储到数据库中。但是,item pipeline 背后的逻辑是每个 item 都会调用相关的方法。所以它总是一次插入一个项目。如何一次收集大约 100 件物品并插入它们?

【问题讨论】:

    标签: python scrapy sql-insert bulkinsert


    【解决方案1】:

    您需要将您的管道重构为如下内容:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2017-12-11
      相关资源
      最近更新 更多