본문 바로가기

Python/Django

Django - Truncate 수행 & Django내 스크립트 실행

Django ORM Cookbook 을 통해 Truncate 를 수행하는 방법을 찾았다. 

 

DELETE FROM 와 같은 SQL들은 삭제 수가 많아지면 처리속도가 느려질 수 있기에 Model에 class method를 사용한다.

 

처음엔 ORM Cookbook 처럼 작성하였는데 

 cursor.execute('TRUNCATE TABLE "{0}" '.format(cls._meta.db_table))

 

자꾸 아래처럼 문법에 맞는 언어로 쓰라는 에러가 나와서 다시 구글링

django.db.utils.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'"Profile"\' at line 1

 

결과적으로 아래 처럼 작성하였더니 정상 수행이 가능하였다. 

from django.db import connection
from django.db import models

class Profile(models.Model):
    usernm = models.CharField(max_length=50, unique=False)
    email = models.EmailField(max_length=255, unique=False)
    telno = models.CharField(max_length=15, unique=False, null=True)
    updated_dt = models.DateTimeField(blank=True, null=True, auto_now=True)

    class Meta:
        db_table = "Profile"

    @classmethod
    def truncate(cls):
        with connection.cursor() as cursor:
            cursor.execute( f'TRUNCATE TABLE {cls._meta.db_table}')

 

그 뒤 정의한 함수를 아래와 같이 호출하여 사용한다. 

Profile.truncate()

 

테스트를 위해 스크립트 파일을 실행해보자. 

Django 에서 스크립트 파일을 실행하고 싶다면 django-extensions 패키지를 사용하면 된다. 

pip install django-extensions

 

settings.py에 해당 패키지를 추가한다. 

# settings.py

INSTALLED_APPS = [
    ....
    'django_extensions',
]

 

스크립트 파일내 run()함수에 실행하고자 하는 내역을 작성한다. 

# account/pscript.py

def pscript():
    ....

def run():
    pscript()

 

script는 아래와 같이 실행하면 된다. 

 python manage.py runscript account.pscript

 

따단! 원하던 결과!

 

 

 

참고자료 (감사합니다!)

https://django-orm-cookbook-ko.readthedocs.io/en/latest/truncate.html?highlight=connection 

https://ssungkang.tistory.com/entry/Django-ORM-Cookbook-%ED%95%AD%EB%AA%A9%EC%9D%84-%EC%83%9D%EC%84%B1%C2%B7%EA%B0%B1%EC%8B%A0%C2%B7%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

https://europani.github.io/django/2021/04/16/022-script.html

'Python > Django' 카테고리의 다른 글

Django ORM과 QuerySet  (0) 2022.10.22
Django - Bulk_create 로 대량의 데이터 DB에 insert하기  (0) 2022.10.12
Django Model - Field 들 소개  (0) 2022.10.07
Django Form 작성 방법  (0) 2022.10.03
우분투 내 MariaDB 설치  (0) 2022.09.28