在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”时。
关于原因是什么的任何想法?
答案 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正常运行。