仅作参考
第一步:建立数据库连接池
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,
版权声明:本文为jim_lucky原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。