Django. Создание таблиц в базе данных при помощи моделей

В данной статье я расскажу про свой опыт работы с Django. Необходимо было динамически создавать таблицы в базе данных из семи типов моделей. Понятно, что можно самому написать запрос, но в проекте использовалось две различные базы данных, и поэтому хотелось это сделать красиво, без написания запросов.

Понятное дело, что syncdb в django это делать умеет. Никакой документации на тот момент по этому поводу не было, поэтому пришлось лезть в исходники Django и узнать, как же все таки он это делает. С этим и спешу поделиться.

<code class="python">    def drop_table(cls, database = 'data'):
        
        cursor = connections[database].cursor()
        
        drop_sql = connections[database].creation.sql_destroy_model(cls, (), no_style())

        for s in drop_sql:
            try:
                cursor.execute(s)
            except Exception as e:
                print e.message

    
    def create_table(cls, database = 'data'):
                
        cursor = connections[database].cursor()

        sql, references = connections[database].creation.sql_create_model(cls, no_style())

        for q in sql:
            try:
               # print q
                cursor.execute(q)
            except  Exception as e:
                print e.message
</code>


Для того, чтобы воспользоваться этими функциями, достаточно передать какую-нибудь модель.

<code class="python">class testModel(models.Model):
    
    id = models.AutoField(primary_key=True)
    count = models.IntegerField(null=True)
  
    class Meta:
        db_table = 'no_name'
</code>

Но до этого конечно нужно сменить название создаваемой таблицы, а делается это так
<code class="python">testModel._meta.db_table = 'testTable1'
create_table(testModel)
</code>

Теперь можно думаю без проблем написать что-то вроде своего syncdb. Спасибо за внимание.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.