如何让Django 2.0使用Oracle 11g语法而不是12c?

问题描述 投票:0回答:1

这是我的开发环境:

  • Windows 7(x64)
  • Python 3.6.3 64bit(虚拟环境)
  • Django 2.0
  • cx_Oracle 6.1
  • Oracle 11.2企业版64位(在远程计算机上)

我没有使用migrate(django manage.py migrate),因为Django正在创建适合Oracle 12c的sql;但我正在使用11克。

例如,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']

但是oracle 11g上没有列identity_column

如何让django使用11g语法?

编辑:

追溯异常我在..\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?

django oracle11g
1个回答
3
投票

来自release notes of django 2.0(我强调):

Oracle 11.2的上游支持即将于2020年12月结束.Django 1.11将在2020年4月之前得到支持,几乎达到此日期。 Django 2.0正式支持Oracle 12.1+。

因此,为了支持任何其他版本的Oracle,您应该降级到1.11

© www.soinside.com 2019 - 2024. All rights reserved.