Django에서 오라클 연동을 하고 있는 상태에서 테이블에 데이터를 넣으려는 상황이다.
Django에서 새로 생성한 테이블이 아니라 기존에 존재하던 테이블을 사용하는 것인데, 테이블 PK로 쓰이는 id값을 오라클 시퀀스를 이용해서 넣어야 한다.
이런 경우 cursor를 사용해서 쿼리문을 직접 입력하여 실행시킬 수 있으므로 이를 이용해서 id컬럼에 시퀀스 값을 넣을 수 있다.
- from django.db import connections
- cursor = connections['oracle'].cursor()
- cursor.execute('''''
- INSERT INTO user (
- id
- , user_id
- ) VALUES (
- USER_SEQ.NEXTVAL
- , %s
- )
- ''', [
- self.user_id
- ])
cursor를 사용하지 않고 save 메소드를 사용하고 싶다면 시퀀스 값을 별도의 쿼리로 가져와서 id 컬럼에 설정해주는 방법을 써야한다.
시퀀스 값을 가져오기 위해 cursor를 써야하기 때문에 cursor를 쓰는 것은 마찬가지지만 다음과 같은 경우에 유용하게 사용할 수 있다.
ajax로 데이터를 삽입하고 callback에서 삽입한 데이터를 화면에 append 시키기 위해 삽입한 데이터가 바로 필요한 경우이다.
이런 경우 cursor를 사용했다면 시퀀스 값으로 추가된 id 값으로 데이터를 조회해야 하는데 어떤 값으로 삽입되었는지 알 수 없어서 데이터를 가져올 수 없게 된다.
save 메소드를 사용하면 삽입한 모델 객체의 내용으로 객체의 내용이 채워지기 때문에 문제없이 데이터를 가져올 수 있다.
이미 save를 위해 객체를 가지고 있긴하지만 삽입 시 auto_now_add 속성으로 현재 시간을 넣어주는 컬럼이 있다면 그 값은 save 전의 객체가 가지고 있지 않다.
참고로 Django에서 생성한 테이블인 경우 자동증가되는 id 컬럼이 존재하게 되는데 auto increment 컬럼이 가능한 경우 이를 이용하지만
오라클 11g 이하에서는 불가능해서 Django에서 'pk_테이블명 '이라는 이름으로 시퀀스를 따로 만들어서 이를 사용하게 된다고 한다.
'개발 > python' 카테고리의 다른 글
Django MySQL 연동(윈도우) (0) | 2016.09.30 |
---|