Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Berinteraksi dengan Berbilang Jadual Sementara dengan Skema yang Sama dalam Django?
Apabila bekerja dengan pangkalan data MySQL, ada kemungkinan untuk mempunyai berbilang jadual sementara dengan skema yang sama tetapi nama dinamik. Untuk berinteraksi dengan jadual ini dalam Django, anda boleh menggunakan fungsi kilang yang menjana model dengan nilai db_table yang ditentukan.
Kod berikut menunjukkan cara mencipta model secara dinamik berdasarkan nama jadual pangkalan data:
<code class="python">def getModel(db_table): class MyClass(models.Model): # Define model fields here... class Meta: db_table = db_table return MyClass</code>
Dengan memanggil getModel(db_table), anda memperoleh model yang menggunakan nama db_table yang ditentukan. Sebagai contoh, untuk mendapatkan data daripada jadual 29345794_table, anda boleh menggunakan:
<code class="python">newClass = getModel('29345794_table') results = newClass.objects.filter(...)</code>
Pada mulanya, Django menyimpan maklumat metaclass untuk setiap kelas berdasarkan namanya . Untuk memintas pengehadan ini, anda boleh menggunakan metaclass tersuai yang mengubah suai nama kelas pada masa jalan:
<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>
Daripada mencipta model baharu setiap kali, anda boleh ubah suai secara dinamik atribut db_table model sedia ada:
<code class="python">MyModel._meta.db_table = '10293847_table' results = MyModel.objects.all()</code>
Pendekatan ini membolehkan anda bertukar secara dinamik antara nama jadual yang berbeza untuk model yang sama.
Atas ialah kandungan terperinci Bagaimana untuk Berinteraksi dengan Berbilang Jadual Sementara dengan Skema yang Sama dalam Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!