삽입 쿼리가 있는데 OpenERP에 마지막으로 삽입 된 ID를 가져 오려고합니다. 다음은 코드입니다.OpenERP를 사용하여 Postgresql에서 마지막으로 삽입 한 ID를 얻는 방법
query = "INSERT INTO foo SELECT * FROM bar"
cr.execute(query) # cr => cursor
마지막으로 삽입 한 ID를 가져 오는 방법? 삽입이 비어있을 때 어떤 일이 발생 했습니까?
삽입 쿼리가 있는데 OpenERP에 마지막으로 삽입 된 ID를 가져 오려고합니다. 다음은 코드입니다.OpenERP를 사용하여 Postgresql에서 마지막으로 삽입 한 ID를 얻는 방법
query = "INSERT INTO foo SELECT * FROM bar"
cr.execute(query) # cr => cursor
마지막으로 삽입 한 ID를 가져 오는 방법? 삽입이 비어있을 때 어떤 일이 발생 했습니까?
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;
RETURNING
가 잘 작동합니다. 그렇지 않으면 currval()
(doc here)을 사용하는 것이 좋습니다.
PostgreSQL RETURNING clause의 Sentinel'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 값을 반환합니다.
openerp 태그에 대한 링크를 보면 openerp orm을 사용하는 것이 좋습니다. orm 호출의 경우, create 메소드는 새로 작성된 레코드의 ID를 리턴합니다.http://doc.openerp.com/v6.0/developer/2_5_Objects_Fields_Methods/methods.html#osv.osv.osv.create
예 :
new_id = self.pool.get('model.name').create(cr, uid, {'name': 'New Name'})
감사합니다
참조 (또한 다음 사용자가 정의한 수있는 osv_memory 클래스 작동). 너는 나의 날을 구한다. – Zeck