programing

django 모델의 사용자 지정 테이블 생성 옵션

coolbiz 2022. 10. 4. 21:47
반응형

django 모델의 사용자 지정 테이블 생성 옵션

여자 모델이 있어(장고=)

class Girl(models.Model):
  id = models.AutoField(primary_key=True)

  first_name = models.TextField()
  last_name = models.TextField()
  nickname = models.TextField(blank=True, null=True)
  maiden_name = models.TextField(blank=True, null=

  about = models.TextField(blank=True, null=True)
  quotes = models.TextField(blank=True, null=True)
  activities = models.TextField(blank=True, null=True)
  books = models.TextField(blank=True, null=True)
  games = models.TextField(blank=True, null=True)
  tv = models.TextField(blank=True, null=True)
  interests = models.TextField(blank=True, null=True)
  movies = models.TextField(blank=True, null=True)
  music = models.TextField(blank=True, null=True)
  ...
  class Meta:
    managed = True
    db_table = 'girls'

스토리: 데이터베이스는 MariaDB+InnoDB 및 텍스트 필드에 엄청나게 큰 유니코드 시가 포함되어 있을 수 있습니다.이 문제는 http://instantbadger.blogspot.ru/2013/01/mysql-row-size-too-large-when-saving.html에서 바로 발생하고 있습니다.

문제: MariDB에서는 변수를 통해 모든 테이블에 대해 기본 ROW_FORMAT을 지정할 수 없습니다(https://jira.mariadb.org/browse/MDEV-9646)).

질문:.django가 최종 SQL에 "ROW_FORMAT=COMPRESSED"를 추가하도록 Meta 또는 마이그레이션 파일 자체에 이 옵션을 지정하려면 어떻게 해야 합니까?

다음과 같이 마이그레이션 파일 내에 사용자 정의 SQL 마이그레이션 작업을 추가할 수 있습니다.

operations = [
    ...
    migrations.RunSQL(""" YOUR SQL HERE """)
]

Django를 그대로 사용할 수는 없지만 위와 같이 테이블을 변경하는 행을 수동으로 이행에 추가할 수 있습니다.

이로 인해 프로젝트의 유연성이 떨어집니다.작업을 지원하지 않는 스토리지 백엔드로 이행하기로 결정한 경우에는 이행 내용을 다시 작성해야 합니다.또한 모델을 변경할 때 변경 내용이 손으로 쓴 SQL에 반영되지 않아 작업이 중단될 수 있습니다.이렇게 말하면 손으로 쓴 질문을 피하기 어려울 때가 있다.

또는 모델의 Meta에 이 기능을 추가하는 자체 django 패키지를 작성할 수도 있습니다.커스텀 데이터베이스 백엔드에 커스텀 데이터베이스 작업을 쉽게 추가할 수 없기 때문에 커스텀 데이터베이스 백엔드를 작성해야 합니다.

언급URL : https://stackoverflow.com/questions/37775253/custom-table-creation-options-in-django-models

반응형