Azi*_*ari 5 oracle django cx-oracle django-orm oracle10g
我在Django中有以下模型:
class Event(models.Model):
# some fields
start_date = models.DateField()
end_date = models.DateField()
Run Code Online (Sandbox Code Playgroud)
我正在使用带有Django 1.5和cx_oracle 5.1.2的Oracle 10g数据库.这里的问题是当我尝试在管理界面中创建一个新对象(从日历中选择日期)时,会引发以下错误:
ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)
syncdb创造了DATE在Oracle领域start_date和end_date.这看起来像是后端错误还是我做错了什么?
我确实有其他模型,DateTimeField()当我持久保存新对象时它们工作正常,问题看起来与DateField自身有关.
更新:我检查了后端实现,并在backends/oracle/base.py第513行到第516行:
cursor.execute(
"ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'"
" NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'"
+ (" TIME_ZONE = 'UTC'" if settings.USE_TZ else ''))
Run Code Online (Sandbox Code Playgroud)
执行此语句允许insert语句具有DATE字段的文字值.我已经检查由后端生成的查询,它是插入'2013-03-20'的start_date和end_date.日期匹配NLS_DATE_FORMAT,所以这在理论上应该有效!
更新:我相信我的案例与cx_oracle有关.
更新:因为我仍然没有一个明确的答案(虽然我几乎可以肯定它是导致这个问题的cx_oracle),但是我把我DateField改成了一个DateTimeField转换成oracle的TIMESTAMP并完美地工作.
cat*_*ine -2
错误的原因是您输入了日期,但该日期的月份部分不是有效的月份。Oracle针对这个问题给出了解决方案。
1MONTH - 使用或格式掩码重新输入日期值MON。月份的有效值为:
January
February
March
.......
//and soon
Run Code Online (Sandbox Code Playgroud)
或者
Jan
Feb
Mar
.......
//and soon
Run Code Online (Sandbox Code Playgroud)
2 - 如果上述解决方案失败,请改用to_date function。
to_date( string1, [ format_mask ], [ nls_language ] )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |