我有一个来自甲骨文的遗留数据库,其中包含字段。如果运行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行,执行
return self.cursor.execute(sql, params)文件"/home/user/dev2/lib/python3.5/site- packages/django/db/backend/oracle/base.py“,第481行,执行
return self.cursor.execute(query, self.\_param\_generator(params))cx_Oracle.DatabaseError: ORA-00904:"ORDERS"."ID":无效标识符
发布于 2017-02-09 18:20:59
这里的问题是,当您不为模型分配主键时,Django将创建一个没有显示在模型上的"ID“PK字段。
但是,当您在模型的元中设置managed = false(我假设您做了)时,Django将不会在数据库中创建/管理这个表,这意味着它不会创建基础ID字段,但是模型级别仍然认为它是存在的(您可以认为这是一个错误并报告它),并尝试使用它进行查询,因此出现了ORA错误。
解决方案是在模型中手动设置与数据库中相同的PK字段,假设account_obj_db是遗留数据库中的Orders的PK字段,只需在models.py中添加primary_key:
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) 在此之后,您可能需要进行另一次迁移。
也要注意你的缩进
https://stackoverflow.com/questions/42012893
复制相似问题