Python Scrapy поддерживает SSH соединение MySQL на каждом process_item - PullRequest
0 голосов
/ 24 августа 2018

Я все еще новичок в Scrapy и Python.

Мне удалось подключиться к удаленной паре БД с учетными данными SSH, но ...

хотел бы предотвратить возникновение этой ошибки на каждом очищаемом элементе.

Ошибка: 2055: Потерянное соединение с сервером MySQL по адресу «127.0.0.1:3306», системная ошибка: 10053 Установленное соединение было прервано программным обеспечением на вашем хост-компьютере

Ниже мой MySQL Pipeline Object

import mysql.connector
import sshtunnel

class MySQLStorePipeline(object):

def __init__(self):
    with sshtunnel.SSHTunnelForwarder(
        ('13.***.***.***', 22),
        ssh_username='***',
        ssh_password='***',
        remote_bind_address=('db1.prod.***.***.net.***', 3306),
        local_bind_address=('127.0.0.1', 3306)
    ) as tunnel:

        self.dbcon = mysql.connector.connect(
            host='127.0.0.1', 
            port=3306,
            user='***', 
            database='***', 
            password='***',
            charset='utf8'
        )
        self.cursor = self.dbcon.cursor() 

def process_item(self, item, spider):
    try:
        tables = self.cursor.execute('SHOW TABLES')
        print tables.fetchall()

        self.dbcon.commit()            
    except mysql.connector.Error as err:
        print('Error: {}'.format(err))

    return item

Я просто не знаю, как поддерживать соединение с базой данных внутри process_item function

1 Ответ

0 голосов
/ 24 августа 2018

Вы используете with ..., поэтому вы получаете такое поведение SSH-туннель из Python автоматически закрывается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...