Mysql
 sql >> база данни >  >> RDS >> Mysql

Единичен модел на Django, множество таблици?

Смятам, че бихте могли да създадете фабрична функция, която да върне вашия модел с динамичен db_table .

def getModel(db_table):
  class MyClass(models.Model):
     # define as usual ...
     class Meta:
       db_table = db_table

  return MyClass

newClass = getModel('29345794_table')
newClass.objects.filter( ...

РЕДАКТИРАНЕ:Django не създава нов екземпляр на _meta на класа атрибут всеки път, когато се извиква тази функция. Създаване на нов екземпляр за _meta зависи от името на класа (Django трябва да го кешира някъде). Метаклас може да се използва за промяна на името на класа по време на изпълнение:

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

не съм сигурен дали може да се задава динамично на вече дефиниран клас. Самият аз не съм го правил, но може да проработи.

Можете да зададете това по всяко време.

>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Важно ли е затварянето на mysql връзката?

  2. mysql селектираща заявка в сериализиран масив

  3. В MySQL workbench какво е потребителско име/парола за връзка?

  4. Какво е по-ефективно - съхраняване на регистрационни файлове в sql база данни или файлове?

  5. com.mysql.jdbc.exceptions.MySQLSyntaxErrorException при използване на PreparedStatement