장고 db테이블 pk/id 초기화

miniminion·2023년 1월 4일
0

장고 데이터베이스 테이블에서 pk(id)를 초기화하는 방법

장고 db테이블의 저장된 값들을 모두 삭제하더라도 id는 초기화되지 않기 때문에, id를 다시 1부터 시작하고자 한다면 추가적인 처리가 필요하다.

크게 2가지 방법이 있다.
(아이디 리셋 전에 테이블 객체들은 모두 지워준다. 남아있다면 id중복으로 인한 오류가 발생할 수 있다.)

첫째, 터미널에서 SQLite database를 열어서 id를 0부터 리셋하는 방법

다음의 명령어를 장고 프로젝트 터미널에서 입력한다.

#데이터베이스 열기
sqlite3 db.sqlite3
#앱 내 모델의 db테이블 id를 초기화
#<AppName_ModelName>은 db테이블 이름이다. 별도로 설정하지 않았다면 AppName_ModelName 이다. 주의할 점은 모두 소문자로 써야한다는 점이다.
UPDATE sqlite_sequence SET seq = 0 WHERE sqlite_sequence.name = "<AppName_ModelName>";

둘째, 코드 안에서 for문을 통해 id를 1부터 시작하도록 수정하는 방법(실제 id가 0으로 초기화 되는 것은 아니다. 단지 새로 업로드하는 데이터들의 id가 0부터 시작되는 것 뿐이다.)

#datas: 앱이름
#Data : 모델 이름
from datas.models import Data
def index_reset():
    records = Data.objects.all()
    index = 1
    for record in records:
        old_record = Data.objects.get(id=record.id)
        record.id = index
        record.save()
        old_record.delete()
        index = index + 1

0개의 댓글