django - AssertionError:数据库连接未设置为 UTC
问题描述
我已经使用相同的设置多次完成服务器设置,但这次,我看到了错误消息。它甚至不允许迁移数据库。
System check identified no issues (0 silenced).
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner
self.run()
File "/usr/lib/python3.9/threading.py", line 892, in run
self._target(*self._args, **self._kwargs)
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/utils/autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 120, in inner_run
self.check_migrations()
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/core/management/base.py", line 458, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/migrations/executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/migrations/loader.py", line 49, in __init__
self.build_graph()
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/migrations/loader.py", line 212, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "/home/datanal/datanal-samply/venv/lib/python3.9/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 "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/models/query.py", line 276, in __iter__
self._fetch_all()
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/models/query.py", line 1261, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "/home/datanal/datanal-samply/venv/lib/python3.9/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 "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1170, in execute_sql
return list(result)
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1569, in cursor_iter
for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/models/sql/compiler.py", line 1569, in <lambda>
for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
File "/home/datanal/datanal-samply/venv/lib/python3.9/site-packages/django/db/utils.py", line 97, in inner
return func(*args, **kwargs)
File "/home/datanal/datanal-samply/venv/lib/python3.9/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
这是我的时区设置.py。
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
操作系统:Ubuntu 21.04 Python 版本:3.9.5 Django 版本:3.0 PostgreSQL:13.3
我也经历了另一个问题,但没有找到任何解决方案。有没有人可以帮助我完成这项工作?我有多个具有相同代码的服务器设置,没有更改任何内容并且可以正常工作,但这次不是。
解决方案
psycopg2 2.9 版的最新更新导致此问题,如此 GitHub 问题中所述:
https://github.com/psycopg/psycopg2/issues/1293#issuecomment-862835147
Psycopg 2.9 将传递给 tzinfo_factory 的值从 int 更改为 timedelta。Django 2.2(可能较新,但我在 2.2 上)检查了 offset == 0 并且从 timedelta(0) != 0 开始,它变得繁荣起来。
当前的解决方案是在您的需求文件中降级psycopg2
(或者psycopg2-binary
如果您使用的是独立软件包)低于 2.9(例如)。psycopg2>=2.8,<2.9
例如,您可以降级为2.8.6
使用:
pip install psycopg2==2.8.6
或者
pip install psycopg2-binary==2.8.6
如果您使用的是诗歌,您可以poetry add psycopg2@2.8.6
将您的版本修复为2.8.6
.
psycopg2发布历史
推荐阅读
- c# - 我可以在循环中有一个断言并获得每个断言的结果,而不仅仅是最后一个断言吗?
- r - 右侧有固定尺寸条的扰乱图
- javascript - 如何从 api 渲染数组数据?
- html - 如何绘制包含 SQL 查询结果的 HTML 表并在 Shell 脚本中发送到邮件
- c# - 为什么行 ConsoleKey key = Console.ReadKey().Key 删除控制台屏幕上最旧的“O”?
- delphi - 重新编译时 Delphi 7 VCL 包运行时错误 216
- android - 检查 Continuos Connection 未在 BaseActivity 中启动
- php - 使用前端控制器时在同一控制器上显示 Ajax 调用值
- html - 缩放 Svg 而不拉伸其中的一部分
- php - Laravel 无法在 eloquent 创建事件上设置 id