我们遇到的问题是:我们已成功运行manage.py makemigrations和manage.py migrate,之后我们开始收到以下错误:
File "/usr/local/goibibo/python/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 110, in execute
return self.cursor.execute(query, args)
File "/usr/local/goibibo/python/lib/python3.5/site-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/usr/local/goibibo/python/lib/python3.5/site-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/usr/local/goibibo/python/lib/python3.5/site-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/usr/local/goibibo/python/lib/python3.5/site-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/usr/local/goibibo/python/lib/python3.5/site-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/usr/local/goibibo/python/lib/python3.5/site-packages/MySQLdb/connections.py", line 292, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (2027, 'Malformed packet')
每次运行makemigrations时都不会出现此问题 它是随机出现的,但一旦它出现它只是棍棒,我们不知道为什么会发生这种情况。 有人可以协助我们解决这个问题并解释为什么会发生这种情况。
在App中使用的软件包
adium-theme-ubuntu==0.3.4
appdirs==1.4.3
asn1crypto==0.22.0
backports-abc==0.5
blinker==1.4
boto3==1.4.4
botocore==1.5.35
certifi==2017.4.17
cffi==1.10.0
chardet==2.3.0
click==6.7
ConcurrentLogHandler==0.9.1
configobj==5.0.6
decorator==4.0.11
Django==1.10.4
djangorestframework==3.5.3
docutils==0.13.1
Flask==0.11.1
futures==3.1.1
gevent==1.2a1
greenlet==0.4.10
gyp==0.1
idna==2.5
itsdangerous==0.24
Jinja2==2.8
jmespath==0.9.2
jsonpatch==1.10
jsonpath==0.75
jsonpath-rw==1.4.0
jsonpointer==1.10
MarkupSafe==1.0
newrelic==2.82.0.62
oauthlib==1.0.3
packaging==16.8
Pillow==3.1.2
ply==3.10
prettytable==0.7.2
pyasn1==0.1.9
pycparser==2.17
pycurl==7.43.0
PyJWT==1.3.0
PyMySQL==0.7.9
PyOpenGL==3.0.2
pyparsing==2.2.0
Pyrex==0.9.8.5
pyserial==3.0.1
PySocks==1.6.5
python-dateutil==2.6.0
PyYAML==3.11
requests==2.14.2
s3transfer==0.1.10
singledispatch==3.4.0.3
six==1.10.0
SQLAlchemy==1.1.4
ssh-import-id==5.5
tornado==4.4.2
unity-lens-photos==1.0
urllib3==1.19.1
virtualenv==15.1.0
Werkzeug==0.12.1
答案 0 :(得分:0)
通过SET read_rnd_buffer_size = 256000为会话解决了mysql 5.6.17。没有必要改变my.ini(cfg)。
答案 1 :(得分:0)
同样的问题困扰了我的团队一段时间,网络上关于它的有用信息很少。我们花了很多时间来解决问题 - 最终找到了解决它的解决方案(至少 - 对于我们的团队而言)!
我们发现Django默认为数据库连接设置了“charset”选项为“utf8”。在故障排除期间,我们使用了两个单独的数据库连接对象:一个由 Django 为我们创建,另一个 - 使用直接 _mysql.connect() 命令手动创建。当我们使用两个连接对象执行完全相同的查询时 - 由 Django 创建的查询导致“django.db.utils.OperationalError: (2027, 'Malformed packet')” (这正是我们在 API 中得到的),但是第二个连接(手动) - 没有任何问题。两个连接对象的进一步比较(我们实际上不得不使用 Python 调试器“pdb”并为此在 django.db.backends.mysql.base.py 中设置断点) - 揭示 Django 通过传递“charset”:“utf8”来创建连接”,而手动 _mysql 连接 - 使用“latin1”。一旦我们在 settings.py 中将 "charset":"latin1" 添加到 DATABASES["default"]["OPTIONS"] 中 - 这个错误就消失了。
总而言之,解决方案(对我们而言)是在 DATABASES 配置的“OPTIONS”配置部分中为每个数据库别名显式设置“charset”:“latin1”。我不能肯定地说这对遇到此错误的每个人都有效 - 但它肯定对我们有效。