2017-12-28 4 views
0

は、これは私のdevの環境です:12cの代わりにOracle 11gの構文を使用するDjango 2.0を作る方法は?

  • のWindows 7(x64)の
  • のPython 3.6.3 64ビット(仮想環境)
  • Djangoの2.0
  • cx_Oracle 6.1
  • のOracle 11.2 Enterprise Editionの64ビット(リモートマシン上)

私はmigrateに失敗しています(django manage.py migrate)DjangoはOracle 12cに適したSQLを作成しているためです。私は11gを使用しています。

例えば、Djangoはこの実行しようとします:

SELECT 
CASE WHEN identity_column = 'YES' THEN 1 ELSE 0 END 
FROM user_tab_cols 
WHERE table_name = 'DJANGO_CONTENT_TYPE' AND 
column_name = 'NAME'; 
('DJANGO_CONTENT_TYPE', 'NAME'); 
args=['DJANGO_CONTENT_TYPE', 'NAME'] 

をしかし、列identity_columnは、Oracle 11gのでは使用できません。

どうすればdjangoで11gの構文を使用できますか?

EDIT:

私は..\Lib\site-packages\django\db\backends\oracle\schema.py(方法_is_identity_column、行151)でこれを見つけた例外を遡っ:

cursor.execute(""" 
       SELECT 
        CASE WHEN identity_column = 'YES' THEN 1 ELSE 0 END 
       FROM user_tab_cols 
       WHERE table_name = %s AND 
         column_name = %s 
      """, [self.normalize_name(table_name), self.normalize_name(column_name)]) 

そこで構文がハードコーディングされています。これは、Django 2.0がOracle 12c以降で使用されることを意味しますか? release notes of django 2.0(私の重点を置いて)から

+0

にダウングレードする必要があります。ただ好奇心が強い:あなたはどのようなエラーに遭遇しますか?私は、大部分のSQL文が両方のリリースで動作することを期待しています。 – Littlefoot

+0

@LittlefootサンプルSQLを公開しました。 – mshsayem

+0

あなたはそのコードにコメントできますか?あなたが言ったように、11gのUSER_TAB_COLSにIDENTITY_COLUMNはありません。または、おそらく、それを0に戻すために「ハードコード」します(11gにID列がないので、12cで導入されました)。 "SELECT 0 FROM USER_TAB_COLS WHERE ..."のように。 – Littlefoot

答えて

2

のOracle 11.2のための上流サポートの終了は12月、2020年ではDjango 1.11 はほとんどこの日になる2020年4月までサポートされます。 Django 2.0は正式にOracle 12.1+をサポートしています。

ので、オラクルの他のバージョンのサポートのために、あなたは私にはわからない1.11

+0

おっと!私は逃しました。ありがとう! – mshsayem

関連する問題