2010-07-01 23 views
3

Est-il possible d'ajouter une nouvelle connexion de base de données à Django à la volée?Possibilité d'actualiser les connexions Django à la volée?

J'ai une application qui utilise plusieurs bases de données (django 1.2.1), et pendant l'exécution, il est permis de créer de nouvelles bases de données. Je devrais utiliser cette nouvelle base de données tout de suite (django.db.connections[db_alias]). Est-il possible sans redémarrage du serveur? En utilisant le module reload ici et là?

Nous vous remercions de votre temps.

Répondre

2

Il est possible ... mais pas recommandé ... Vous pouvez accéder au gestionnaire de connexion en cours ...

Utilisez quelque chose comme ceci:

from django.db import connections 
if not alias in connections.databases: 
    connections.databases[alias] = connections.databases['default'] # Copy 'default' 
    connections.databases[alias]['NAME'] = alias    

Assurez-vous de ne pas essayer de ajouter un nouvel alias au dictionnaire des bases de données alors qu'il y a TOUTE activité de base de données sur le thread en cours.

Un problème que vous devez surmonter, c'est que ce code devra être placé quelque part où il sera toujours touché par le thread en cours avant d'essayer d'accéder à la base de données. J'utilise le middleware pour y parvenir.

+2

A noter également, assurez-vous que vos bases de données ont une structure complètement identique ... car cette technique contourne la validation de la base de données Django. – Howard