Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Comment "lier" ma base de données crée avec Django et mon script python en utilisant djangobasecommand

+1 vote

je voudrais utiliser Django BaseCommand dans mon manage.py pour executer mon script python et importer les données qu'il récupère dans les différentes tables de ma BDD.

demandé 28-Aou-2015 par YannMgl (170 points)
reclassée 28-Aou-2015 par max

Si tu n'arrives pas à comprendre la doc, précise le.

1 Réponse

+2 votes
 
Meilleure réponse

Tout est expliqué dans la doc, il suffit de faire l'import des models concernés...
et voici un exemple maison

répondu 28-Aou-2015 par foxmask (2,892 points)
sélectionné 3-Sep-2015 par YannMgl

j'ai un probleme avec le tuto, quand je lance ma commande :

python manage.py closepoll

-bash: syntax error near unexpected token `newline'

c'est une erreur qui n'a rien à voir avec le tuto mais avec ce que tu tapes sur le shell, du genre ca ou ca

En effet j'ai pas bien capte ce tuto. J'ai donc mon fichier python ci-dessous que je souhaite donc "integrer" avec mon projet Django dont le nom de l'application est "chris_db"

import os, pydicom

for dossier, sous_dossiers, fichiers in os.walk('/neuro/users/chris/data'):
  for fichier in fichiers:
      fullpath = os.path.join(dossier, fichier)
      print(fullpath)
      try:
        ds = pydicom.read_file(fullpath)
        print(ds.PatientName)

Il est pas complet mais en gros ca va etre une succession de try/except pour trouver les informations dans les fichiers .dcm pour ensuite inserer ces informations dans les differentes tables de mon projet Django.

De ce que j'ai compris il faut que je commence par creer deux repertoires puis ensuite creer une commande perso pour mon appli "chris_db" mais je capte pas trop comment se fait le lien entre les fichiers.

De quel lien avec quel fichier parles tu ?

Je parle du lien entre le fichier que je viens de poster et mon Projet Django.

dans le dossier du module on créé l'arborescence

management
    __init__.py
   commands
       __init__.py
       yannmgl.py

et dans yannmgl.py on y mettrait par exemple

import os, pydicom
from django.core.management.base import BaseCommand, CommandError


class Command(BaseCommand):
    help = 'that does my stuff'

    def handle(self, *args, **options):
        for dossier, sous_dossiers, fichiers in os.walk('/neuro/users/chris/data'):
            for fichier in fichiers:
                fullpath = os.path.join(dossier, fichier)
                self.stdout.write('%s' % fullpath)
                try:
                    ds = pydicom.read_file(fullpath)
                    self.stdout.write('%s' % ds.PatientName)
                except IOError:
                    self.stdout.write('file does not exist')

ensuite on peut taper

python manage.py 

et voir dans la liste des commandes possible yannmlg

donc on peut finir par

python manage.py yannmgl

pour que le contenu de cette commande s'execute

parfait ca marche merci beaucoup !

Si ça ruôle, n'oublie pas de valider la réponse pour que les suivants sachent qu'en réponse est faite :-)

ok ca roule. Et si je veux rentrer la valeur que je viens de recuperer lors de la lecture d'un fichier .dcm dans une table de ma base de donnees je peux pas juste faire :

                  Patient.patient_age= 16
                  Patient.save()

Je pensais par exemple recuperer le nom du patient puis l'ajouter dans la table "Patient".

Pour créer un objet n'existant pas c' est comme ça https://docs.djangoproject.com/fr/1.8/topics/db/queries/
Sinon on fait l'appel à lnbjet on modifié une propriété et on save ()

Patient.get(nom=le_nom_trouve_dans_le_fichier)
Patient.âge = 23
Patient.save()

c'est bon it works ! MERCI

un moment donné si on ne valide pas les réponses aux questions comme indiqué ici http://indexerror.net/faq il arrivera ce qui est y indiqué.

...