如何解决 ORA-22284:django 中不支持重复的 LONG 绑定错误

Posted

技术标签:

【中文标题】如何解决 ORA-22284:django 中不支持重复的 LONG 绑定错误【英文标题】:How to solve ORA-22284: duplicate LONG binds are not supported error in django 【发布时间】:2018-03-29 12:38:13 【问题描述】:

我正在使用 django 和 oracle 数据库。我有一个使用 django-modeltranslation 的模型。当我为一种以上的语言添加文本时,Oracle 数据库会抛出 ORA-22284:不支持重复的 LONG 绑定错误。我该如何解决? 我是 *** 的新手。如果我的问题不够详细,请告诉我。

这是我的模型:

class About(models.Model):
    image = models.ImageField(upload_to='about', verbose_name=_('Image'))
    text = models.TextField(verbose_name=_("Text"))
    phone = models.CharField(max_length=50, verbose_name="Phone")
    address = models.CharField(max_length=255, verbose_name=_("Address"))

class Meta:
    verbose_name = _("About")
    verbose_name_plural = _("About")

def __str__(self):
    return str(_('About AzeriCard'))

这是translations.py

from app.models import *
from modeltranslation.translator import translator, TranslationOptions

class AboutTrans(TranslationOptions):
    fields = ('text', 'address')

【问题讨论】:

问题不在于您的 Python 代码。您的一列具有数据类型long(我猜是textaddress,Oracle 不支持与之绑定。您可以使用函数来返回结果,但它不必要地复杂,尤其是使用一个 ORM。如果您需要超过 4,000 字节的字段,我强烈建议您使用 CLOB。 @Ben,我必须在数据库级别进行,对吧?我不能改变 django-orm 如何将 TextField“翻译”成 SQL 代码吗?我知道它可以在数据库级别解决,但我需要让 django 代码在不接触数据库的情况下工作。 如果我的假设是正确的,其中一列是long,那么是的,您必须在数据库级别进行更改。现在是 only provided for backward compatibility,文档说 “不要创建具有 LONG 列的表。请改用 LOB 列(CLOB、NCLOB、BLOB)。支持 LONG 列仅是为了向后兼容。” 【参考方案1】:

最近使用 Oracle 和 Django ORM,使用多个 TextField 并分配相同的值(超过 2000 个字符)。 Oracle 崩溃并出现 ORA-22284 错误。

class Object(models.Model):
    text = models.TextField(verbose_name=_("Text"))
    text1 = models.TextField(verbose_name=_("Text1"))


@receiver(pre_save, sender=Object)
def add_spaces_to_textfield(sender, instance, **kwargs):
    if instance.text == instance.text1:
         instance.text1 = instance.text1 + " "

在您使用模型翻译的情况下,您可以使用字段、text、text_xx、text_yy 进行类似操作

【讨论】:

以上是关于如何解决 ORA-22284:django 中不支持重复的 LONG 绑定错误的主要内容,如果未能解决你的问题,请参考以下文章

Python curses 不支持重定向

主机获得许可的版本为vmware vsphere 5 enterprise plus vcenter的许可证版本不支

重命名服务器文件错误(http 包装器不支持重命名)[PHP]

如何解决 Django 中显示“无法解析剩余部分”的 TemplateSyntaxError

如何解决 Django 中不正确的填充?

如何在 Django 1.7 中解决“django.core.exceptions.ImproperlyConfigured:应用程序标签不是唯一的,重复:foo”?