这是我的开发环境:
我没有使用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?
来自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