Тайм-аут алхимии SQL при выполнении большого запроса - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть большой запрос для выполнения через SQL Alchemy, который имеет приблизительно 2,5 миллиона строк.Это подключение к базе данных MySQL.Когда я делаю:

transactions = Transaction.query.all()

Время ожидания составляет около десяти минут.И получает эту ошибку: sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2013, «Потерянное соединение с сервером MySQL во время запроса»)

Я пытался установить различные параметры при выполнении create_engine, например:

create_engine(connect_args={'connect_timeout': 30})

Что мне нужно изменить, чтобы время ожидания запроса не истекло?

Мне также было бы хорошо, если есть способ разбить результаты на страницы и просмотреть их таким образом.

1 Ответ

0 голосов
/ 29 ноября 2018

Решено пагинацией:

    page_size = 10000  # get x number of items at a time
    step = 0
    while True:
        start, stop = page_size * step, page_size * (step+1)
        transactions = sql_session.query(Transaction).slice(start, stop).all()
        if transactions is None:
            break
        for t in transactions:
            f.write(str(t))
            f.write('\n')
        if len(transactions) < page_size:
            break
        step += 1
    f.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...