2 votes

Comment accéder aux données dans Django dont les modèles ne sont pas définis dans models.py?

J'ai configuré correctement la base de données. Si je veux accéder aux données de la table hello dans la base de données appelée genes. Quelle est la bonne façon de le faire? Je ne peux pas le faire avec books.models import hello car je n'ai pas hello dans models.py. La base de données genes et la table hello ne sont pas la base de données par défaut de Django. J'ai deux bases de données. J'ai déjà configuré le Router. Je veux maintenant accéder aux données. Comment puis-je faire cela? Merci

1voto

rh0dium Points 2771

Vous devez faire quelques choses..

settings.py

DATABASES = {
    'genes': {
        'ENGINE':   'django.db.backends.mysql',
        'NAME':     'genes',
        'USER':     'root',
        'PASSWORD': 'root',
        'HOST':     'localhost',
        'PORT':     '3360',
    },
    'default': {
        'ENGINE':   'django.db.backends.mysql',
        'NAME':     'django',
        'USER':     'root',
        'PASSWORD': 'root',
        'HOST':     'localhost',
        'PORT':     '3360',
    }
}

DATABASE_ROUTERS = ['genes.routers.GeneRouter',]

routers.py

class GeneRouter(object):
    """Un routeur pour contrôler toutes les opérations sur les modèles de l'application genes"""

    def db_for_read(self, model, **hints):
        "Redirige toutes les opérations sur les modèles genes vers 'genes'"
        if model._meta.app_label == 'genes':
            return 'remrate'
        return None

    def db_for_write(self, model, **hints):
        "Redirige toutes les opérations sur les modèles genes vers 'genes'"
        if model._meta.app_label == 'genes':
            return 'remrate'
        return None

    def allow_syncdb(self, db, model):
        "Assurez-vous que l'application genes n'apparaisse que dans la base de données 'genes'"
        if model._meta.app_label in ['south']:
            return True
        if db == 'remrate':
            return model._meta.app_label == 'genes'
        elif model._meta.app_label == 'genes':
            return False
        return None

Une fois que vous avez configuré cela, vous devez créer le fichier models.py pour le

models.py

class Hello(models.Model):
    """Modèle Hello"""

    field1 = models.CharField(max_length=64)

    class Meta:
        db_table = u'hello'
        managed = False

Pour faire cela de manière programmatique..

python manage.py inspectdb

Une fois que cela est fait - vous devriez pouvoir effectuer une requête en utilisant des ensembles de requêtes Django standard

Hello.objects.all()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X