2011-05-02 3 views

답변

7

RETURNING clause을 살펴보십시오.

INSERT INTO table [ (column [, ...]) ] 
    { DEFAULT VALUES | VALUES ({ expression | DEFAULT } [, ...]) [, ...] | query } 
    [ RETURNING * | output_expression [ AS output_name ] [, ...] ] 

은 DEFAULT 절에 의해 생성 된 일련 번호를 반환 테이블 유통에 단일 행을 삽입 : 당신은 V8.2의 +를 실행하는 경우

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') 
    RETURNING did; 
+0

감사합니다

참조 (또한 다음 사용자가 정의한 수있는 osv_memory 클래스 작동). 너는 나의 날을 구한다. – Zeck

1

RETURNING가 잘 작동합니다. 그렇지 않으면 currval() (doc here)을 사용하는 것이 좋습니다.

0

PostgreSQL RETURNING clauseSentinel's suggestion이 가장 사용하기 쉬운 것 같습니다.

OpenERP의 ORM 클래스가 새 레코드의 id 값을 관리하는 방법에 대해서도 관심이있을 것입니다. 그것은 새로운 ID 값을 생성하기 위해 각 테이블 시퀀스를 사용

# Try-except added to filter the creation of those records whose filds are readonly. 
    # Example : any dashboard which has all the fields readonly.(due to Views(database views)) 
    try: 
     cr.execute("SELECT nextval('"+self._sequence+"')") 
    except: 
     raise except_orm(_('UserError'), 
        _('You cannot perform this operation. New Record Creation is not allowed for this object as this object is for reporting purpose.')) 
    id_new = cr.fetchone()[0] 

: 여기 orm.create() 방법에서 단편이다. 시퀀스의 이름은 orm.__init__() method에서 볼 수 있듯이 테이블의 이름과 '_id_seq'의 기본값으로 지정됩니다.

당신이 성취하고자하는 바를 모르겠지만, the orm class을 사용하면 기록을 작성하고 세부 사항을 처리하는 것이 더 쉬울 수도 있습니다. 예를 들어 the create method은 새 레코드의 id 값을 반환합니다.

관련 문제