MySQL 데이터베이스로 작업할 때 스키마는 동일하지만 이름은 동적인 임시 테이블이 여러 개 있을 수 있습니다. Django에서 이러한 테이블과 상호 작용하려면 지정된 db_table 값으로 모델을 생성하는 팩토리 함수를 사용할 수 있습니다.
다음 코드는 db_table을 기반으로 동적으로 모델을 생성하는 방법을 보여줍니다. 데이터베이스 테이블 이름:
<code class="python">def getModel(db_table): class MyClass(models.Model): # Define model fields here... class Meta: db_table = db_table return MyClass</code>
getModel(db_table)을 호출하면 지정된 db_table 이름을 사용하는 모델을 얻을 수 있습니다. 예를 들어, 29345794_table 테이블에서 데이터를 검색하려면 다음을 사용할 수 있습니다.
<code class="python">newClass = getModel('29345794_table') results = newClass.objects.filter(...)</code>
처음에 Django는 이름을 기반으로 각 클래스에 대한 메타클래스 정보를 캐시합니다. . 이러한 제한을 피하기 위해 런타임 시 클래스 이름을 수정하는 사용자 정의 메타클래스를 사용할 수 있습니다.
<code class="python">def getModel(db_table): class MyClassMetaclass(models.base.ModelBase): def __new__(cls, name, bases, attrs): name += db_table return models.base.ModelBase.__new__(cls, name, bases, attrs) class MyClass(models.Model): __metaclass__ = MyClassMetaclass class Meta: db_table = db_table return MyClass</code>
매번 새 모델을 생성하는 대신 다음을 수행할 수 있습니다. 기존 모델의 db_table 속성을 동적으로 수정합니다.
<code class="python">MyModel._meta.db_table = '10293847_table' results = MyModel.objects.all()</code>
이 접근 방식을 사용하면 동일한 모델에 대해 서로 다른 테이블 이름 간에 동적으로 전환할 수 있습니다.
위 내용은 Django에서 동일한 스키마를 가진 여러 임시 테이블과 상호 작용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!