我有一个来自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行,执行中
return self.cursor.execute(sql,params)
文件“/home/user/dev2/lib/python3.5/site- packages / django / db / backends / oracle / base.py”,第481行,执行中
return self.cursor.execute(query,self._param_generator(params))
cx_Oracle.DatabaseError:ORA-00904:“ORDERS”。“ID”:标识符无效
答案 0 :(得分:1)
这里的问题是,当您没有为模型分配主键时,Django将创建一个" ID" PK字段未在模型上显示。
但是当您在模型的元组中设置managed = false
(我假设您已经这样做)时,Django将不会在数据库中创建/管理此表,这意味着它不会创建基础ID pk字段,但模型级仍然认为它存在(您可以认为这是一个错误并报告它)并尝试用它进行查询,因此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)
您可能需要在此之后再进行一次迁移
还要注意缩进