Django 1.4 syncdb + psycopg因时区错误而失败

时间:2013-01-24 07:11:45

标签: python django postgresql psycopg2

在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”时。

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

1 个答案:

答案 0 :(得分: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"

“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:

将调试'print conn_tz'放入base.py后显示conn_tz(可能是postgres db的时区设置)是'Australia / West'。

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