【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 出来ました。
では