2013-08-16 1 views
3

Django로 데이터베이스의 테이블에 데이터를 삽입하려고했습니다.django가 오라클 데이터베이스에 유효하지 않은 식별자를 삽입했습니다.

class RunableFilters(models.Model): 
    equipment_id = models.BigIntegerField(null=True, blank=True) 
    filter_file_name = models.CharField(max_length=255, blank=True) 
    last_updated = models.CharField(max_length=255, blank=True) 
    class Meta: 
     db_table = 'runable_filters' 

오류가 내가 얻을 : 이것은 내가에 삽입 할 노력하고있어 표 내 모델 내 DB에

>>> from books.models import RunableFilters 
>>> p1 = RunableFilters(equipment_id = '123456778', filter_file_name = "test_file_name", last_updated = "2013-16-8") 
>>> p1.save() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 546, in save 
    force_update=force_update, update_fields=update_fields) 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 650, in save_base 
    result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw) 
    File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 215, in _insert 
    return insert_query(self.model, objs, fields, **kwargs) 
    File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1675, in insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 937, in execute_sql 
    cursor.execute(sql, params) 
    File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 41, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\Python27\lib\site-packages\django\db\backends\oracle\base.py", line 717, in execute 
    six.reraise(utils.DatabaseError, utils.DatabaseError(*tuple(e.args)), sys.exc_info()[2]) 
    File "C:\Python27\lib\site-packages\django\db\backends\oracle\base.py", line 710, in execute 
    return self.cursor.execute(query, self._param_generator(params)) 
DatabaseError: ORA-00904: "RUNABLE_FILTERS"."ID": invalid identifier 

테이블 그게 전부입니다

enter image description here

+0

실행 파이썬 32 비트 2.7과 1.5.2 – shreddish

+0

을 장고가 해당이 장고의 만든 DB 되었습니까 Le'ts는 equipment_id는 PK 역할을 할 수 supose 'syncdb' 명령은? 그렇지 않은 경우 테이블 스키마를 표시하십시오. –

+0

DB가 레거시 DB이고 RunableFilters 테이블과 함께 생성되고 구조화 된 경우 inspectdb를 실행하여 테이블에 대한 모델을 생성했습니다. 테이블 – shreddish

답변

4

문제는 django가 PK 필드가 id이 될 것을 기대하고 있습니다.

Y 쉽게 해결할 수 있으며 레거시 데이터베이스 통합에 대해 알아보십시오. https://docs.djangoproject.com/en/dev/howto/legacy-databases/.

코드의 경우 기본 키를 찾아 django에 알립니다.

class RunableFilters(models.Model): 
    equipment_id = models.BigIntegerField(primary_key=True) #<-- here 
    filter_file_name = models.CharField(max_length=255, ... 

당신이 복합 PK가있는 경우, 다음이 게시물 읽기 : https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys

+0

글자 그대로 그냥 기본 키로 equipment_id를 추가하려했는데 이것을 확인하기 전에 제대로 작동했습니다. 대답을 쓰려고했다. 도와 주셔서 감사합니다 – shreddish

관련 문제