python scrapy框架中如何提升数据操作数据库的效率

本文介绍了如何在Python Scrapy框架中通过建立数据库连接池和调整adbapi.py参数来提高数据操作数据库的效率。主要步骤包括设置合适的最小和最大数据库连接数,以优化数据存取流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

仅作参考
第一步:建立数据库连接池

import pymysql
from twisted.enterprise import adbapi


# 异步更新操作
class MySQLPipeline(object):
    def __init__(self, dbpool):
        self.dbpool = dbpool

        

    @classmethod
    def from_settings(cls, settings):  # 函数名固定,会被scrapy调用,直接可用settings的值
        """
    数据库建立连接
    :param settings: 配置参数
    :return: 实例化参数
    """
        adbparams = dict(
            host='#数据库IP',#数据库IP
            db='数据库名称',#数据库名称
            user='数据库用户名',#数据库用户名
            password='数据库用户密码',#数据库用户密码
            cursorclass=pymysql.cursors.DictCursor  # 指定cursor类型
        )

        # 连接数据池ConnectionPool,使用pymysql或者Mysqldb连接
        dbpool = adbapi.ConnectionPool('pymysql', **adbparams)
        # 返回实例化参数
        return cls(dbpool)

    def process_item(self, item, spider):
        """
    使用twisted将MySQL插入变成异步执行。通过连接池执行具体的sql操作,返回一个对象
    """
        # print('0000')
        query = self.dbpool.runInteraction(self.do_insert, item)  # 指定操作方法和操作数据
        # 添加异常处理
        query.addCallback(self.handle_error)  # 处理异常

    def do_insert(self, cursor, item):
        # 对数据库进行插入操作,并不需要commit,twisted会自动commit
        # print('1111')
       
#REPLACE into根据主键guolv来进行判断插入数据库的
            insert_sql = """REPLACE into father_asin(`guolv`,`id1`,`sku1`,`asin1`,`asinId1`,`isFba1`,`title1`,`newtime`,`belongDate`,`price`,`bsrRank`,`bsrCategory`,`bsrRankLs`,`bsrCategoryLs`,`adTraffic`,`review`,`sessions`,`traffic`,`naturalTraffic`,`ucr`,`ocr`,`naturalCR`,`orders`,`adOrders`,`quantities`,`goodsSale`,`totalIncome`,`costs`,`profits`,`profitsRate`,`fbaFee`,`salesCommission`,`promotionFee`,`unitCost`,`fbaFeeRate`,`fbmShippingCostRate`,`refundManageFee`,`returnOrders`,`returnRate`,`impressions`,`clicks`,`ctr`,`adCR`,`adSales`,`spend`,`aCoS`,`Roas`,`acoAs`,`asoAs`,`reviewRate`,`site1`,`accountName`) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"""
            cursor.execute(insert_sql, (
                item["guolv"], item["id1"], item["sku1"], item["asin1"], item["asinId1"], item["isFba1"],
                item["title1"], item["newtime"], item["belongDate"], item["price"], item["bsrRank"],
                item["bsrCategory"], item["bsrRankLs"], item["bsrCategoryLs"], item["adTraffic"], item["review"],
                item["sessions"], item["traffic"], item["naturalTraffic"], item["ucr"], item["ocr"],
                item["naturalCR"], item["orders"], item["adOrders"], item["quantities"], item["goodsSale"],
                item["totalIncome"], item["costs"], item["profits"], item["profitsRate"], item["fbaFee"],
                item["salesCommission"], item["promotionFee"], item["unitCost"], item["fbaFeeRate"],
                item["fbmShippingCostRate"], item["refundManageFee"], item["returnOrders"], item["returnRate"],
                item["impressions"], item["clicks"], item["ctr"], item["adCR"], item["adSales"], item["spend"],
                item["aCoS"], item["Roas"], item["acoAs"], item["asoAs"], item["reviewRate"], item["site1"],
                item["accountName"]))

        

    def handle_error(self, failure):
        if failure:
            # 打印错误信息
            print(failure)

第二步:修改adbapi.py中的参数

min = 30  # Minimum number of connections in pool
max = 50  # Maximum number of connections in pool

该参数是调节允许连接数据库的最小连接数,最大连接数,

min默认是3,

max默认是5,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值