Возможно, вы могли бы использовать состояние курсора, чтобы сказать вам, используется ли курсор. Допустим, у вас был следующий курсор:
new_cursor = new_connection.cursor()
cursor.execute(new_query)
и вы хотели посмотреть, доступно ли это соединение для использования другим курсором. Вы могли бы быть в состоянии сделать что-то вроде:
if (new_cursor.rowcount == -1):
another_new_cursor = new_connection.cursor()
...
Конечно, все это действительно говорит вам о том, что курсор еще ничего не выполнял с момента последнего закрытия. Он может указывать на выполненный курсор (и, следовательно, на соединение, которое было закрыто), или он может указывать на курсор, который был только что создан или присоединен к соединению. Другой вариант - использовать цикл try / catch, например:
try:
another_new_cursor = new_connection.cursor()
except ConnectionError?: //not actually sure which error would go here but you get the idea.
print("this connection is busy.")
Конечно, вы, вероятно, не хотите получать спам с распечатанными сообщениями, но вы можете делать в этом все, что захотите, кроме блока, бездействия в течение 5 секунд, ожидания передачи другой переменной, ожидания ввода пользователя и т. Д. Если вы ограничены PEP 249, вам придется делать много вещей с нуля. Есть ли причина, по которой вы не можете использовать внешние библиотеки?
РЕДАКТИРОВАТЬ: Если вы хотите выйти за пределы PEP 249, вот что может сработать, но оно может не подходить для ваших целей. Если вы используете библиотеку mysql
python, вы можете воспользоваться методом is_connected
.
new_connection = mysql.connector.connect(host='myhost',
database='myDB',
user='me',
password='myPassword')
...stuff happens...
if (new_connection.is_connected()):
pass
else:
another_new_cursor = new_connection.cursor()
...