Creación de modelo dinámico para múltiples tablas en Django
Para una base de datos que contiene numerosas tablas temporales con esquemas compartidos y nombres dinámicos, la integración de Django presenta desafíos . Sin embargo, es posible utilizar una función de fábrica para crear modelos con tablas de bases de datos dinámicas.
Gestión de tablas de bases de datos dinámicas
La función de fábrica devuelve un modelo con una base de datos específica mesa. Esto permite el enlace de datos dinámico basado en nombres de tablas:
def getModel(db_table):
class MyClass(models.Model):
# Model definition goes here...
class Meta:
db_table = db_table
return MyClass
Luego puede crear una instancia del modelo con el nombre de tabla específico:
newClass = getModel('29345794_table')
newClass.objects.filter(...)
Metaclase para denominación dinámica de clases
Dado que Django almacena en caché el atributo _meta de la clase, es necesaria una metaclase para modificar el nombre de la clase en tiempo de ejecución:
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
Consideraciones adicionales
Aunque inicialmente se pensó que era inmutable, la tabla de la base de datos se puede configurar dinámicamente:
MyModel._meta.db_table = '10293847_table'
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3