Вы можете использовать его вне проекта django.
Но есть вещи, о которых вы должны знать.
1. Маршрутизатор с несколькими базами данных.
Маршрутизатор выглядит так:
class Router(object):
app_label = ''
def db_for_read(self, model, **hints):
if model._meta.app_label == self.app_label:
return self.app_label
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == self.app_label:
return self.app_label
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == self.app_label or obj2._meta.app_label == self.app_label:
return True
return None
def allow_migrate(self, db, app_label, model=None, **hints):
if app_label == self.app_label:
return db == self.app_label
return None
Вы можете использовать метакласс для динамического создания маршрутизатора.
def add_db(db_conf):
app_label = 'al_' + str(uuid4())
settings.DATABASES[app_label] = db_conf
router_class_name = 'Router' + app_label.capitalize()
setattr(
settings,
router_class_name,
type(router_class_name, (Router,), dict(app_label=app_label)),
)
settings.DATABASE_ROUTERS.append(
'.'.join([settings.__name__, router_class_name])
)
connections.close_all()
return app_label
2. Настройки Django.
самый важный ключ - TIME_ZONE
. DatetimeField
и DateField
высвобождается к нему.
Простейшая настройка должна быть:
SECRET_KEY = 'secret'
DATABASES = {'default': {}}
DATABASE_ROUTERS = []
TIME_ZONE = None
3. close_old_connections
.
Фреймворк Django по умолчанию запускает close_old_connections в каждом промежуточном программном обеспечении запроса, чтобы избежать " mysql пропал ".
PS : Я написал пакет для использования django orm, а не в классическом проекте django, https://github.com/jdxin0/django_db(https://github.com/jdxin0/django_db).
Но вы всегда должны обращать внимание на три вышеуказанные проблемы. Мой пакет использует метакласс для решения multi db, установите TIME_ZONE=None
и оставьте close_old_connections
для пользователя.