首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django外壳ORA-00904

Django外壳ORA-00904
EN

Stack Overflow用户
提问于 2017-02-02 21:47:58
回答 1查看 1.8K关注 0票数 2

我有一个来自甲骨文的遗留数据库,其中包含字段。如果运行Orders.objects.count(),就会得到正确的金额。当我运行Orders.object.all()时,我得到了这个错误,但是还没有在线找到解决方案。

class Orders(models.Model):

account_obj_db = models.BigIntegerField(blank=True, null=True)

account_obj_id0 = models.BigIntegerField(blank=True, null=True)

account_obj_type = models.CharField(max_length=1020, blank=True, null=True)

account_obj_rev = models.BigIntegerField(blank=True, null=True)

order_payload_buf_size = models.BigIntegerField(blank=True, null=True)

total_entitlement_count = models.BigIntegerField(blank=True, null=True)

currency_code = models.BigIntegerField(blank=True, null=True)

>>> from home.models import Orders

>>> Orders.objects.all()

回溯(最近一次调用):

文件"/home/user/dev2/lib/python3.5/site- packages/django/db/后端/utils.py“,第64行,执行

代码语言:javascript
复制
 return self.cursor.execute(sql, params)

文件"/home/user/dev2/lib/python3.5/site- packages/django/db/backend/oracle/base.py“,第481行,执行

代码语言:javascript
复制
 return self.cursor.execute(query, self.\_param\_generator(params))

cx_Oracle.DatabaseError: ORA-00904:"ORDERS"."ID":无效标识符

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-09 18:20:59

这里的问题是,当您不为模型分配主键时,Django将创建一个没有显示在模型上的"ID“PK字段。

但是,当您在模型的元中设置managed = false(我假设您做了)时,Django将不会在数据库中创建/管理这个表,这意味着它不会创建基础ID字段,但是模型级别仍然认为它是存在的(您可以认为这是一个错误并报告它),并尝试使用它进行查询,因此出现了ORA错误。

解决方案是在模型中手动设置与数据库中相同的PK字段,假设account_obj_db是遗留数据库中的Orders的PK字段,只需在models.py中添加primary_key:

代码语言:javascript
复制
class Orders(models.Model):
    account_obj_db = models.BigIntegerField(primary_key = true, blank=True, null=True)
    account_obj_id0 = models.BigIntegerField(blank=True, null=True)
    account_obj_type = models.CharField(max_length=1020, blank=True, null=True)
    account_obj_rev = models.BigIntegerField(blank=True, null=True)
    order_payload_buf_size = models.BigIntegerField(blank=True, null=True)
    total_entitlement_count = models.BigIntegerField(blank=True, null=True)
    currency_code = models.BigIntegerField(blank=True, null=True) 

在此之后,您可能需要进行另一次迁移。

也要注意你的缩进

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42012893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档