MySQL-server-has-gone-away icon indicating copy to clipboard operation
MySQL-server-has-gone-away copied to clipboard

autocommit not wrapped

Open diegobill opened this issue 5 years ago • 4 comments

This library is not handling "mysql server has gone away" exceptions when autocommit is executed so I am receiving the error below when I execute any django orm query, for example "TicketSold.objects.filter(tapos_performance_code__in=perfs).delete()":

on_deleted error: Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\mysql\base.py", line 257, in _set_autocommit
    self.connection.autocommit(autocommit)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 211, in autocommit
    _mysql.connection.autocommit(self, on)
MySQLdb._exceptions.OperationalError: (2006, 'MySQL server has gone away')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\sensible-sync\utils.py", line 12, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\Administrator\Desktop\sensible-sync\FileStream.py", line 45, in on_deleted
    self.handle_deleted(event)
  File "C:\Users\Administrator\Desktop\sensible-sync\sync\lib\SensiblePlaydate2TaposStream.py", line 120, in handle_deleted
    TicketSold.objects.filter(tapos_performance_code__in=perfs).delete()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\query.py", line 711, in delete
    deleted, _rows_count = collector.delete()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\models\deletion.py", line 284, in delete
    with transaction.atomic(using=self.using, savepoint=False):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\transaction.py", line 201, in __enter__
    connection.set_autocommit(False, force_begin_transaction_with_broken_autocommit=True)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\base\base.py", line 405, in set_autocommit
    self._set_autocommit(autocommit)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\mysql\base.py", line 257, in _set_autocommit
    self.connection.autocommit(autocommit)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\mysql\base.py", line 257, in _set_autocommit
    self.connection.autocommit(autocommit)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\site-packages\MySQLdb\connections.py", line 211, in autocommit
    _mysql.connection.autocommit(self, on)
django.db.utils.OperationalError: (2006, 'MySQL server has gone away')

how can I wrap autocommit too?

diegobill avatar Nov 25 '20 11:11 diegobill

@diegobill this is weird, I'm using autocommit true and it works.

  • Which version of django are you using?
  • Do you use atomic transaction decorator under multiple queries?

Can you collaborate with PR? I would be happy to merge it.

akoidan avatar Nov 25 '20 12:11 akoidan

@akoidan , I am using django 2.2.6

diegobill avatar Nov 25 '20 12:11 diegobill

I am not using atomic transaction decorator

diegobill avatar Nov 25 '20 12:11 diegobill

Roger that @diegobill

I will check this tomorrow if I have time.

akoidan avatar Nov 25 '20 13:11 akoidan