【问题标题】:django.db.utils.DatabaseError: ORA-02267: column type incompatible with referenced column typedjango.db.utils.DatabaseError: ORA-02267: 列类型与引用的列类型不兼容
【发布时间】:2022-01-22 14:30:05
【问题描述】:

我正在使用 Django 和 Oracle,我必须使用另一个 Scehma 中的一些表

class ModelTable1(models.Model):
    official_id = models.CharField(db_column="ID_OFFICIAL", primary_key=True, max_length=20)
    field_1 = models.CharField(max_length=25, db_column="COLUMN_X", blank=True, null=True)
    field_2 = models.CharField(max_length=25, db_column="COLUMN_Y", blank=True, null=True)

    class Meta:
        db_table = '"SCHEMAX"."TABLE1"'
        default_permissions = []
        managed = False

当我尝试与架构中的模型建立关系并运行迁移时,出现以下错误: django.db.utils.DatabaseError: ORA-02267: 列类型与引用的列类型不兼容

我的模型定义是:

class ModelTable2(AuditDataMixin):
    id = models.AutoField(db_column='ID', primary_key=True)
    official_id = models.ForeignKey(
        ModelTable1, models.DO_NOTHING, db_column="ID_OFFICIAL"
    )
    status = models.CharField(db_column='ESTADO', max_length=2, blank=True, null=True)

    class Meta:
        db_table = 'TABLE2'
        default_permissions = []

当我去表时,我可以看到问题,SCHEMAX.Table1.ID_OFFICIAL 是 Varchar2(20) 类型,MYSCHEMA.Table2.ID_OFFICIAL 是 NVARCHAR2(20) 类型。

当我运行迁移时,我能做些什么而不是像 Varchar2 一样创建 FK?

谢谢!!

【问题讨论】:

    标签: python django oracle django-models


    【解决方案1】:

    我认为你有两个选择。尝试将 SCHEMAX.Table1.ID_OFFICIAL 的类型更改为 nvarchar 或尝试将 varchar 用于 MYSCHEMA.Table2.ID_OFFICIAL

    虽然您必须直接在数据库上尝试选项一(因为 managed=False),但您可以为选项二尝试 custom model field。这是一个示例(未测试):

    class MyCustomField(models.Field):
        def rel_db_type(self, connection):
            return 'Varchar2(20)'
    

    【讨论】:

    • 感谢@Marco,我试过了,但没用!阅读框架代码 django>db>backends>oracle>base.py 有一个 data_types 字典,其中定义了所有列类型 {'CharField': 'NVARCHAR2(%(max_length)s)', ... } 我改为 {'CharField': 'VARCHAR2(%(max_length)s)', ... } 并且可以工作!!现在我可以工作,稍后我必须看到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多