丢失 MySql 连接的 Django ORM 密钥错误

Django ORM key error with lost MySql connection

这是环境:

  1. 与 MySql.

  2. 兼容的 AWS Aurora 数据库
  3. Django 2.0.3 (Python 3.6)

  4. Pip-Mysql 依赖项:django-mysql==2.2.2, mysqlclient==1.3.12.

  5. 主从数据库配置。

django 或 mysql 引擎似乎总是在某些查询上失败导致此特定错误:

Traceback (most recent call last): File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 158, in get rel_obj = self.field.get_cached_value(instance) File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/django/db/models/fields/mixins.py", line 13, in get_cached_value return instance._state.fields_cache[cache_name] KeyError: 'assigned_to'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 71, in execute return self.cursor.execute(query, args) File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/MySQLdb/cursors.py", line 253, in execute self._warning_check() File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/MySQLdb/cursors.py", line 148, in _warning_check warnings = db.show_warnings() File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/MySQLdb/connections.py", line 381, in show_warnings self.query("SHOW WARNINGS") File "/home/ubuntu/ivs/vpython/lib/python3.6/site-packages/MySQLdb/connections.py", line 277, in query _mysql.connection.query(self, query) _mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query')

是的,我的一个模型有 "assigend_to" 字段,它是一个外键。但为什么它会因 KeyError 而失败?

有没有人遇到过任何类似的 KeyErrors 并因此 MySql 失去连接?

在官方的MySQL定义中,有一个关于这个错误的specific page。从这里可以详细看出,这里是你应该尝试的:

  1. 您的错误中的 "during query" 项可能与处理数百万行导致的超时有关。您可以将 net_read_timeout 增加到 60 秒等
  2. 当您尝试初始连接时可能会发生这种情况,但在您的情况下这是不可能的。

哇,实际情况是这样的:

  1. 我正在使用反向外键进行查询。
  2. 使用反向外键返回的对象包含一些其他外键。
  3. 当我尝试访问它们时,例如'assigned_to' 我每次都遇到这个异常。