2

在 MacOS 上安装 Postgres.app 并使用 Django、dj-database-url 和 psycopg2 初始化 python virtualenv 后,我反复得到:

/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 194, in _cursor
self.ops.set_time_zone_sql(), [tz])
psycopg2.DataError: invalid value for parameter "TimeZone": "UTC"

为我的 Django 应用程序执行“python manage.py syncdb”时。

关于原因是什么的任何想法?

4

1 回答 1

3

当我检查 base.py 文件的第 194 行时,我注意到以下代码:

tz = 'UTC' if settings.USE_TZ else settings_dict.get('TIME_ZONE')

通过将我的 settings.py 文件中的 USE_TZ 参数更改为“False”,我得到了以下错误:

psycopg2.DataError: invalid value for parameter "TimeZone": "Australia/Perth"

“澳大利亚/珀斯”是我的 settings.py 文件中的时区设置,所以至少它现在正在访问我的时区。

再次查看 psycopg2 base.py 文件,我注意到以下代码:

if tz:
                try:
                    get_parameter_status = self.connection.get_parameter_status
                except AttributeError:
                    # psycopg2 < 2.0.12 doesn't have get_parameter_status
                    conn_tz = None
                else:
                    conn_tz = get_parameter_status('TimeZone')

                if conn_tz != tz:

将调试“打印 conn_tz”放入 base.py 表明 conn_tz(可能是 postgres 数据库的时区设置)是“澳大利亚/西部”。

将我的 settings.py TIME_ZONE 更改为 'Australia/West' 允许 syncdb 正常运行。

于 2013-01-24T07:11:45.370 回答