【发布时间】:2017-06-20 03:42:42
【问题描述】:
我有一个来自 oracle 的旧数据库,其中包含字段。如果我运行 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/backends/utils.py”,第 64 行,在执行
返回 self.cursor.execute(sql, params)
文件“/home/user/dev2/lib/python3.5/site-packages/django/db/backends/oracle/base.py”,第 481 行,在执行
返回 self.cursor.execute(查询,self._param_generator(params))
cx_Oracle.DatabaseError: ORA-00904: "ORDERS"."ID": 标识符无效
【问题讨论】:
-
请添加一些示例行
-
听起来模型和数据库表不匹配,您可以迁移以确保它们匹配或像数据库中的表一样编辑模型
-
由于我的表没有主键,我相信 Django 正在创建 ID 字段。在文档中,我没有看到绕过自动字段的方法。任何想法? @Mojimi
-
@AlleeClark 我对旧数据库也有类似的问题,所以是的,您需要一个主键,在数据库中表的一个字段上创建该约束,然后添加 primary_key = true 参数到模型中的同一字段,您可能需要再次迁移
-
@Mojimi 你是对的。我必须添加主键。我不确定您是否想添加一个答案供我选择。它将帮助那些努力从遗留数据库中序列化数据的人。
标签: sql django oracle django-models