parent
7ad6b5e424
commit
c9f4ad14e0
@ -0,0 +1,48 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from pymysql.cursors import DictCursor
|
||||
from twisted.enterprise import adbapi
|
||||
|
||||
|
||||
class MySQLTwistedPipeline(object):
|
||||
'''
|
||||
将MySQL插入操作变成异步化
|
||||
'''
|
||||
def __init__(self, db_pool):
|
||||
self.db_pool = db_pool
|
||||
|
||||
@classmethod
|
||||
def from_settings(cls, settings):
|
||||
'''
|
||||
create db_pool
|
||||
'''
|
||||
db_parameters = dict(
|
||||
host=settings["MYSQL_HOST"],
|
||||
db=settings["MYSQL_DBNAME"],
|
||||
user=settings["MYSQL_USER"],
|
||||
passwd=settings["MYSQL_PASSWORD"],
|
||||
charset="utf8",
|
||||
cursorclass=DictCursor,
|
||||
use_unicode=True
|
||||
)
|
||||
db_pool = adbapi.ConnectionPool("pymysql", **db_parameters)
|
||||
return cls(db_pool)
|
||||
|
||||
def process_item(self, item, spider):
|
||||
'''
|
||||
process item
|
||||
'''
|
||||
query = self.db_pool.runInteraction(self.do_insert, item)
|
||||
query.addErrback(self.handle_error, item, spider)
|
||||
|
||||
def handle_error(self, failure, item, spider):
|
||||
'''
|
||||
handle error of insert to mysql
|
||||
'''
|
||||
print(failure)
|
||||
|
||||
def do_insert(self, cursor, item):
|
||||
'''
|
||||
insert data into the database
|
||||
'''
|
||||
insert_sql, parameters = item.get_insert_sql()
|
||||
cursor.execute(insert_sql, parameters)
|
Loading…
Reference in new issue