は、これは私の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(私の重点を置いて)から
にダウングレードする必要があります。ただ好奇心が強い:あなたはどのようなエラーに遭遇しますか?私は、大部分のSQL文が両方のリリースで動作することを期待しています。 – Littlefoot
@LittlefootサンプルSQLを公開しました。 – mshsayem
あなたはそのコードにコメントできますか?あなたが言ったように、11gのUSER_TAB_COLSにIDENTITY_COLUMNはありません。または、おそらく、それを0に戻すために「ハードコード」します(11gにID列がないので、12cで導入されました)。 "SELECT 0 FROM USER_TAB_COLS WHERE ..."のように。 – Littlefoot