请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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)

正在回答 回答被采纳积分+3

1回答

bobby 2020-04-19 15:49:53
def handle_error(self, failure, item, spider):
    #处理异步插入的异常
    print(failure)

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

0 回复 有任何疑惑可以回复我~
  • 提问者 小屁孩屁小 #1
    谢谢老师!,我试下.生产环境中.比较小心!出现重复数据的话,删除数据的sql不好写!麻烦了
    回复 有任何疑惑可以回复我~ 2020-04-19 19:13:05
  • bobby 回复 提问者 小屁孩屁小 #2
    生产环境确实要小心
    回复 有任何疑惑可以回复我~ 2020-04-21 13:34:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信