【问题标题】:Django: ORA:01461: can bind a LONG value only for insert into a LONG columnDjango:ORA:01461:只能绑定 LONG 值以插入 LONG 列
【发布时间】:2020-06-22 14:16:09
【问题描述】:

Django 版本 1.9.6。 Python 版本:3.4.3

我在我的模型 (flal_file = models.BinaryField()) 中创建了一个二进制字段,用于在数据库中插入二进制数据。

数据库列是 blob 字段。

创建对象(插入)时出现该错误。

注释掉 flal_file 可防止出现此错误。

我不知道为什么会出现这个错误,因为这是一个二进制字段。

这是旧版本 Django 的错误吗?谁能帮我调试一下这个问题?

myfile = request.FILES['uploaded_file'] 
b = DocFileAllocation.objects.using('db_test_').create(
                   flal_file=myfile.read(), #binary data
                   flal_id_no=seq_doc_file, 
                   bmeta_id_no=seq_metadata,
                   flal_file_subject=subject,
                   )

b.save(using='db_test_')

【问题讨论】:

  • 在不了解 Django 的情况下,似乎 Oracle 正在默默地将您的二进制数据转换为 LONG 数据类型。你能在插入之前声明数据类型吗?如果是这样,将 flal_file 声明为 BLOB 应该这样做
  • 这里的问题是它已经在 Django 模型中声明为二进制字段但错误涉及 LONG
  • 查看此处了解相同问题和解决方法stackoverflow.com/q/21197523/851930
  • 这个错误似乎发生在旧版本的 Django 中。但仅限于二进制字段
  • 你的 Django 版本是什么?

标签: python django oracle django-models django-orm


【解决方案1】:

通过数据库触发器添加主键解决了问题。在模型中应该是AutoField

同时在保存对象时指定update_fields 以避免主键问题。

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 2013-06-01
    • 2014-09-20
    • 2014-08-09
    • 2017-08-29
    • 1970-01-01
    • 2012-02-11
    • 2016-05-07
    相关资源
    最近更新 更多