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://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 |