15.12.09

Django ORM без Джанги

Я так и не смог себя заставить изучить Алхимию. Не лезет в голову то, что разум трактует как избыточное. А использование Django-orm в не веб проектах раздражало. Пишешь какой-нибудь парсер приходится захламлять папку целиковой джанга-структурой.

Так вот, наконец-то я выделил время и разобрался-таки, как засунуть всю конфигурацию django orm в один файлик. Делюсь сей радостью :)

Всего один файлик models.py:


#!/usr/bin/python
# -*- coding: utf-8 -*-

from django.conf import settings
settings.configure(
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': 'db.sqlite',
        }
    }
)
from django.db import models


class Person(models.Model):
    nick = models.CharField(max_length=100, unique=True)
    email = models.EmailField(max_length=100, unique=True)

    def __unicode__(self):
        return self.nick

    class Meta:
        app_label = ''


def create_table(cls):
    from django.db import connection
    from django.core.management.color import no_style
    
    sql, references = connection.creation.sql_create_model(cls, no_style())
    cursor = connection.cursor()
    for q in sql:
        try:
            cursor.execute(q)
        except:
            pass
    

def main():
    create_table(Person)


if __name__ == "__main__":
    main()



Для создания таблиц просто запускайте этот файлик. Ну а использовать как обычно

from models import Person

Person.objects.....

6 коммент.:

adw0rd комментирует...

О, спасибо, буду юзать!

narsilion комментирует...

Спасибо! Таблицу создать получилось, а вот from models import Person не работает! ImportError: No module named models.
У тебя точно работает?

Imbolc комментирует...

Эмм... ну вот тот файлик, которым ты модели создавал назови models.py

А "from models import Person" нужно делать из другого уже файла, где ты хочешь модель использовать :)

narsilion комментирует...

Спасибо, переименование файла решило проблему!

Вадим комментирует...

пасиб!

Дмитрий комментирует...

Спасибо, тоже стала такая проблема.