Джанго воссоединяется с БД, когда соединение проиграноMySql

Форум по Mysql
Ответить
Anonymous
 Джанго воссоединяется с БД, когда соединение проиграно

Сообщение Anonymous »

У меня есть проект Django, MySQL DB находится на отдельном хосте, соединенном TCP.
У меня есть этот скрипт: < /p>
#!/usr/bin/env python

from asyncio import sleep, run

from django import setup as django_setup
django_setup()

from django.db import connections
from django.contrib.auth.models import User
from django.db import OperationalError, close_old_connections

async def test():
while True:
try:
objs=User.objects.all()
print(await objs.acount())
except KeyboardInterrupt:
break
except OperationalError as e: # Need to reconnect
print(f'main(): OperationalError: {e}')
#raise
# (1053, 'Server shutdown in progress')
# (2013, 'Lost connection to MySQL server during query')
# (2006, 'Server has gone away')
code=e.args[0]
if code in {1053, 2006, 2013, 2026}: # Only when it's restarting, and once
#await sync_to_async(conn.connect)()
close_old_connections()
print('After reconnect')
#reconnect()
else:
#breakpoint()
pass
except Exception as e:
print(f'in _round() {type(e)}')
else:
pass
#breakpoint()

print('Sleeping')
await sleep(5)

try:
run(test())
except KeyboardInterrupt:
raise
except:
print('In run(main())')
breakpoint()
pass
< /code>
Затем я использую Tcpkill для прерывания соединения: < /p>
tcpkill 'dst port 3306'
< /code>
Как мне указать Джанго воссоединиться? Я не делаю этого автоматически, close_old_connection не работает, вывод подобен следующим образом: < /p>
3
Sleeping
3
Sleeping
main(): OperationalError: (2013, 'Lost connection to MySQL server during query')
After reconnect
Sleeping
main(): OperationalError: (2013, 'Lost connection to MySQL server during query')
After reconnect
Sleeping
main(): OperationalError: (2013, 'Lost connection to MySQL server during query')
After reconnect
Sleeping
< /code>
При рассмотрении кода я вижу, что он порождает объект курсора из объекта соединения, а затем не работает, а затем закрыт, в то время как, вероятно, объект подключения остается неповрежденным и продолжает давать непригодные курсоры. Я пробовал connection.connect (), но это не сработает, потому что код асинхрон.

Подробнее здесь: https://stackoverflow.com/questions/794 ... on-is-lost
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»