質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • MySQL

    5502questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Python 3.x

    5278questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Linux

    3466questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Django

    900questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • Anaconda

    77questions

DjangoでMySQLに接続したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 167

 前提・実現したいこと

ここに質問の内容を詳しく書いてください。
さくらのVPS上で、Qiitaに手順のログを記しながら、簡単なデータベースアプリケーションを作ろうとしています

 発生している問題・エラーメッセージ

「python manage.py makemigrations」のところでエラーが出てきます。
エラーの原因はPyMySQLで間違いなさそうですが、原因の領域の切り分けができない...

[op@ik1-336-28225 pj1]$ python manage.py makemigrations app1
Traceback (most recent call last):
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 236, in get_new_connection
    return Database.connect(**conn_params)
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/__init__.py", line 90, in Connect
    return Connection(*args, **kwargs)
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 699, in __init__
    self.connect()
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 935, in connect
    self._get_server_information()
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 1249, in _get_server_information
    packet = self._read_packet()
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 1005, in _read_packet
    % (packet_number, self._next_seq_id))
pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0

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

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/management/__init__.py", line 365, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/management/base.py", line 332, in execute
    self.check()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/management/base.py", line 364, in check
    include_deployment_checks=include_deployment_checks,
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/management/base.py", line 351, in _run_checks
    return checks.run_checks(**kwargs)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/checks/registry.py", line 73, in run_checks
    new_errors = check(app_configs=app_configs)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/core/checks/model_checks.py", line 27, in check_all_models
    errors.extend(model.check(**kwargs))
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/models/base.py", line 1200, in check
    errors.extend(cls._check_fields(**kwargs))
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/models/base.py", line 1272, in _check_fields
    errors.extend(field.check(**kwargs))
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 894, in check
    errors = super().check(**kwargs)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 206, in check
    errors.extend(self._check_backend_specific_checks(**kwargs))
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 303, in _check_backend_specific_checks
    return connections[db].validation.check_field(self, **kwargs)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/validation.py", line 21, in check_field
    field_type = field.db_type(self.connection)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/models/fields/__init__.py", line 648, in db_type
    return connection.data_types[self.get_internal_type()] % data
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 133, in data_types
    if self.features.supports_microsecond_precision:
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/mysql/features.py", line 65, in supports_microsecond_precision
    return self.connection.mysql_version >= (5, 6, 4)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/utils/functional.py", line 36, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 345, in mysql_version
    with self.temporary_connection() as cursor:
  File "/home/op/anaconda3/lib/python3.6/contextlib.py", line 82, in __enter__
    return next(self.gen)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 576, in temporary_connection
    cursor = self.cursor()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
    return self._cursor()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
    self.ensure_connection()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/op/anaconda3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 236, in get_new_connection
    return Database.connect(**conn_params)
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/__init__.py", line 90, in Connect
    return Connection(*args, **kwargs)
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 699, in __init__
    self.connect()
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 935, in connect
    self._get_server_information()
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 1249, in _get_server_information
    packet = self._read_packet()
  File "/home/op/anaconda3/lib/python3.6/site-packages/pymysql/connections.py", line 1005, in _read_packet
    % (packet_number, self._next_seq_id))
django.db.utils.InternalError: Packet sequence number wrong - got 45 expected 0

 該当のソースコード

全体のソースはこちらに書いてあります。
https://github.com/duri0214/CentOS-Python

が、ほぼほぼPyMySQLの問題であるというアタリがついていますので、
PyMySQLに関連するソースを書きます。まずはフォルダツリーを。

[op@ik1-336-28225 pj1]$ tree
.
┣ app1
┃ ┣ __init__.py
┃ ┣ __pycache__
┃ ┃ ┣ __init__.cpython-36.pyc
┃ ┃ ┣ admin.cpython-36.pyc
┃ ┃ ┣ models.cpython-36.pyc
┃ ┃ ┣ urls.cpython-36.pyc
┃ ┃ ┗ views.cpython-36.pyc
┃ ┣ admin.py
┃ ┣ apps.py
┃ ┣ migrations
┃ ┃ ┗ __init__.py
┃ ┣ models.py
┃ ┣ templates
┃ ┃ ┗ index.html
┃ ┣ tests.py
┃ ┣ urls.py
┃ ┗ views.py
┣ manage.py
┗ pj1
    ┣ __init__.py
    ┣ __pycache__
    ┃ ┣ __init__.cpython-36.pyc
    ┃ ┣ settings.cpython-36.pyc
    ┃ ┗ urls.cpython-36.pyc
    ┣ settings.py
    ┣ urls.py
    ┗ wsgi.py

そしてPyMySQL関連の記述をした箇所が、pj1/pj1 ディレクトリの settings.py です。
凡例:
★:追記箇所
●:コメントアウトした箇所(デフォルトで書いてあるもの)

# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databasesimport pymysql
★pymysql.install_as_MySQLdb()
DATABASES = {
●    'default': {
●        'ENGINE': 'django.db.backends.sqlite3',
●        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
●    }
★    'default': {
★        'ENGINE': 'django.db.backends.mysql',
★        'NAME': 'pythondb',
★        'USER': 'python',
★        'PASSWORD': 'python123',
★        'HOST': '153.126.200.229',
★        'PORT': '61203',
★    }
}

 試したこと

ひとまずpj1フォルダを消して、やりなおすことでエラーが出ない状態(Hello Djangoの状態)に戻せることはわかったので、いろんなチュートリアルみると makemigrationsはすんなり通る場所なのに環境が違うのかわからないけど大ハマりしています。作りたいものがもう迫っているのにスタートに立てないのはまずい...

 補足情報(FW/ツールのバージョンなど)

・Linux(CentOS release 7.4)
・Apache 2.4.6
・MySQL 5.7
・Python 3.6(Anaconda)
・Django 2.0
・PyMySQL 0.8

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mts10806

    2018/05/13 18:01

    ご自身が書かれたコードをご提示ください。参考先はあくまで参考のもので、今問題が起きているコードは自身のものとして提示すべきです。https://teratail.com/help/question-tips#questionTips3-5

    キャンセル

  • YoshitakaOkada

    2018/05/13 18:19

    反応いただきありがとうございます。github先のコードは、現時点でさくらのサーバーにアップされている自分のコードのすべてです。問題があるコードを示せれば一番いいのでしょうけども恐らくソースコード自体の問題ではないと思っています(どちらかというとPyMySQLに関連する設定または環境の問題だと思っています)。「python manage.py makemigrations app1」のコマンドが通らないのです..。どのような情報を提示すればベストなのかも正直わかっておりませんが、ソースはすべて提示しているつもりです。

    キャンセル

  • mts10806

    2018/05/13 18:26

    外部サービスを利用するのはいいのですが何かでその外部サービスが利用できなくなった場合にコードを確認する術がなくなるので、コア部分だけでも結構ですので質問本文にご提示ください。

    キャンセル

  • YoshitakaOkada

    2018/05/13 18:31

    なるほどそういうことでしたか。関連しそうな箇所を書きます

    キャンセル

回答 1

check解決した方法

0

原因は
DjangoとPyMySQLの相性問題だったようです。
mysqlclientに変えたら解決しました。
同じ症状にあたってるひとの役に立つといいね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • MySQL

    5502questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Python 3.x

    5278questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Linux

    3466questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Django

    900questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

  • Anaconda

    77questions