python - 使用 Scrapy 时如何将多个项目插入数据库?

标签 python scrapy sql-insert bulkinsert

现在大多数数据库都支持一次插入多条记录到数据库中。这比一条一条地插入记录要快得多,因为只需要一个事务。 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

关于python - 使用 Scrapy 时如何将多个项目插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64285317/

相关文章:

php - 我的图像没有下载到我的数据库表

INSERT INTO...ON DUPLICATE UPDATE 的 MySQL 索引

python - Pyspark 数据帧过滤器 OR 条件

python - 使用 python 和 PyAPNS 发送 iOS 推送通知

python - ScrapingHub 环境变量未加载

python - 按计划进行 Scrapy

javascript - scrapy填写POST表单

python - 在pygame中滚动文本

python - 在turtle.bye()之后重新打开turtle

sql - SQL 新手 - 无法获取季度日期输出