Mam następujący model w Django:Django - Oracle błąd wewnętrzny
class Event(models.Model):
# some fields
start_date = models.DateField()
end_date = models.DateField()
Używam Oracle Database 10g z Django 1.5 i cx_Oracle 5.1.2. Chodzi tu przy próbie utworzenia nowego obiektu w interfejsie administratora (picking daty z kalendarza), jest następujący błąd podniesiony:
ORA-01843: not a valid month
syncdb
stworzył DATE
pole w Oracle dla start_date
i end_date
. Czy to wygląda jak błąd backendu, czy robię coś nie tak?
Mam inne modele z DateTimeField()
i działają dobrze, gdy utrzymuję nowe obiekty, problem wygląda na sam z siebie DateField
.
UPDATE: Sprawdziłem realizacji zaplecza, aw backends/oracle/base.py
linii 513 do 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 ''))
Wykonanie tego komunikatu umożliwia INSERT mieć wartości literalne dla DATE
dziedzinach. Sprawdziłem zapytanie generowane przez backend i wstawia ono '2013-03-20'
w start_date
i end_date
. Data pasuje do NLS_DATE_FORMAT
, więc to teoretycznie powinno działać!
UPDATE: Uważam, że moja sprawa to related to cx_oracle.
UPDATE: Ponieważ ja wciąż nie ma jednoznacznej odpowiedzi (chociaż jestem prawie pewien, że to cx_Oracle który jest przyczyną tego problemu), zmieniłem DateField
do DateTimeField
co przekłada się na Oracle TIMESTAMP
i działa perfekcyjnie.
Więc po prostu być jasne, jesteś sprawdzanie tabel Oracle SYS dla SQL jest prowadzony i widząc coś takiego 'TO_DATE (" 2013- 03-20 ',' RRRR-MM-DD ') 'we wkładce?Z twojego pytania wygląda ono jak "NLS_DATE_FORMAT =" RRRR-MM-DD HH24: MI: SS' ", które różni się od rzeczywistej wstawki, chociaż nie wiem, jaki byłby efekt w tym kontekście. – woemler
Nie, ze względu na ustawienie zestawienia sesji zmian "NLS_DATE_FORMAT", można wstawić datę jako literał bez znaku to_date, co ma miejsce, gdy sprawdzam wykonywany SQL. – abstractpaper
Czy umieścisz odpowiedni SQL uruchamiany na serwerze, który powoduje błąd "ORA-01843"? – woemler