老师您好, 请问这异步插入mysql代码是否有些许bug, 我通过异步插入数据库出现大量重复数据,代码是课上的异步mysql代码没有修改

来源:8-5 通过downloadmiddleware随机更换user-agent - 2

小屁孩屁小

2020-04-18

class MysqlTwistedPipline(object):
def init(self, dbpool):
self.dbpool = dbpool

@classmethod
def from_settings(cls, settings):
    dbparms = dict(
        host = settings["MYSQL_HOST"],
        db = settings["MYSQL_DBNAME"],
        user = settings["MYSQL_USER"],
        passwd = settings["MYSQL_PASSWORD"],
        charset='utf8',
        cursorclass=pymysql.cursors.DictCursor,
        use_unicode=True,
    )
    dbpool = adbapi.ConnectionPool("MySQLdb", **dbparms)

    return cls(dbpool)

def process_item(self, item, spider):
    #使用twisted将mysql插入变成异步执行
    query = self.dbpool.runInteraction(self.do_insert, item)
    query.addErrback(self.handle_error, item, spider) #处理异常
    return item

def handle_error(self, failure, item, spider):
    #处理异步插入的异常
    print(failure)

def do_insert(self, cursor, item):
    #执行具体的插入
    #根据不同的item 构建不同的sql语句并插入到mysql中
    insert_sql, params = item.get_insert_sql()
    cursor.execute(insert_sql, params)
写回答

1回答

bobby

2020-04-19

def handle_error(self, failure, item, spider):
    #处理异步插入的异常
    print(failure)

这里打断点 只要没有进入这里就说明数据已经插入了

0
2
bobby
回复
小屁孩屁小
生产环境确实要小心
2020-04-21
共2条回复

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5795 学习 · 6290 问题

查看课程