見出し画像

【IT】Djangoでmigrate時にエラー

皆さま
こんにちは

Djangoで
DBにPostgreSQLとpsycopg2時にエラー出た時の対応となります。

エラーとなった環境:
Python==3.10.9
Django==3.0
psycopg2-binary==2.9.5

"python manage.py migrate"を実施して
DBマイグレートしようとすると
以下のエラーとなります。

Traceback (most recent call last):
  File "/usr/local/webapp/manage.py", line 22, in <module>
    main()
  File "/usr/local/webapp/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.10/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 231, in handle
    post_migrate_state = executor.migrate(
  File "/usr/local/lib/python3.10/site-packages/django/db/migrations/executor.py", line 123, in migrate
    self.check_replacements()
  File "/usr/local/lib/python3.10/site-packages/django/db/migrations/executor.py", line 292, in check_replacements
    applied = self.recorder.applied_migrations()
  File "/usr/local/lib/python3.10/site-packages/django/db/migrations/recorder.py", line 77, in applied_migrations
    return {(migration.app, migration.name): migration for migration in self.migration_qs}
  File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 276, in __iter__
    self._fetch_all()
  File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 1261, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/usr/local/lib/python3.10/site-packages/django/db/models/query.py", line 57, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1170, in execute_sql
    return list(result)
  File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1569, in cursor_iter
    for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
  File "/usr/local/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1569, in <lambda>
    for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
  File "/usr/local/lib/python3.10/site-packages/django/db/utils.py", line 97, in inner
    return func(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/django/db/backends/postgresql/utils.py", line 6, in utc_tzinfo_factory
    raise AssertionError("database connection isn't set to UTC")
AssertionError: database connection isn't set to UTC

対処方法は3つあります。

1つ目の対処方法:
psycopg2-binaryのバージョンを2.8.6へダウングレードする。

2つ目の対処方法:
Djangoのsettings.pyで”USE_TZ= True”を無効化するです。

注意点として
Djangoのsettings.pyで
TIME_ZONE = 'Asia/Tokyo'
USE_TZ= True
に設定すると、datetimeはUTCベースで保存し、
表示上は日本時間を使用されています。
これをFalse(無効化)するとdatetimeは日本時間で保存されますが、
グローバル化対応際に
一つづつ設定しないとならないため、余分な労力がかかります。

3つ目の対処方法:
これは単純に
Djangoを3.2以上を使用すると解決されます。

3つ目の方法で対策し無事migrate 出来ました。


では

この記事が気に入ったらサポートをしてみませんか?