Python MySQL-Соединитель, Вставляющий Длинные Текстовые Строки

#mysql #mysql-python #mysql-connector

Вопрос:

Скрипт Python, работающий на Windows VPS (общий хостинг, удаленное подключение к MySQL, ограниченные ресурсы). Вставка текста в базу данных MySQL в Linux. Тип данных MySQL — «текст». Когда текст меньше 3000 символов, он работает нормально. Когда его количество превышает 3000 символов, время ожидания истекает. Вот код:

 import mysql.connector

try:
    mydb = mysql.connector.connect(host="", user="", password="", database="", connection_timeout=15)
    mycursor = mydb.cursor()

except Exception as e:
    print(e)

sql = "INSERT INTO tableName (experience) VALUES (%s)"

val = ('THREE THOUSAND CHARACTERS OF TEXT') # WORKS FINE

val = ('FOUR THOUSAND CHARACTERS OF TEXT') # TIMEOUT ERRORS

try:
    mycursor.execute(sql, val)
    mydb.commit()
    print("record inserted")
except Exception as e:
    print(e)
  
mycursor.close()
mydb.close()
 

Вот ошибки:

 2055: Lost connection to MySQL server at system error: 10054 An existing connection was forcibly closed...
 

И когда я удаляю параметр тайм-аута из подключения:

 2055: Lost connection to MySQL server at system error: 10060 A connection attempt failed because the connected...
 

Единственное решение, которое я могу придумать, — это каким-то образом буферизировать или загружать текст кусками, но я не думаю, что это можно сделать с помощью одной записи. Искренне признательна за помощь.

Комментарии:

1. опубликуйте таблицу создания и увеличьте время ожидания

2. Пожалуйста, объясните. Таблица уже существует. Увеличение connection_timeout не помогает. Что такое wait_timeout? Это настройка в MySQL? Спасибо.

Ответ №1:

Вы не прочитали комментарий полностью

тайм-аут подключения-это только время ожидания до установления соединения

wait_timeout-это время, в течение которого процесс ожидает завершения запроса.

Так что увеличьте wait_timeout

  cursor.execute('SET GLOBAL wait_timeout=28800')
 

Комментарии:

1. Спасибо за ответ, но mycursor = mydb.cursor («УСТАНОВИТЬ ГЛОБАЛЬНЫЙ wait_timeout=30000»), похоже, не помогает. Все еще генерирует системную ошибку: 10060 Попытка подключения не удалась, поскольку подключенная сторона не ответила должным образом через некоторое время

2. это действительно медленное соединение, еще больше увеличьте оба параметра, время ожидания подключения, а также ожидание