2009-09-01 5 views
2

grâce guys.i réussi à terminer it.million merci encore spécialement pour DAVID, WM-EDDIE et S.LOTT.also Stackoverflowfichier csv importation dans la base de données MySQL en utilisant django application web

La solution:

   **model = Contact() 
       model.contact_owner = request.user 
       model.contact_name = row[1] 
       model.contact_mobile_no = row[2] 
       model.select_group = row[3] 
       model.save()** 

mon user.py

def import_contact(request): 
if request.method == 'POST': 
    form = UploadContactForm(request.POST, request.FILES) 
    if form.is_valid(): 
      csvfile = request.FILES['file'] 
      print csvfile 

      csvfile.read() 
       testReader = csv.reader(csvfile,delimiter=' ', quotechar='|') 

      **#what code should i write here to store data in mysql** 


      for row in testReader: 
        print "|".join(row) 
    return HttpResponseRedirect('/admin') 


else: 
    form = UploadContactForm() 

vars = RequestContext(request, { 'form': form }) 
return render_to_response('admin/import_contact.html', vars) 

les données dans un fichier csv:

abubakar, rooney, 0 178222123, étudiant

abubakar, ronaldo, 0183886789, étudiant

abubakar, kaka, 0197887898, bola

apprécié tout suggestion.and peut espérer me montrer quelques exemples de codage coz je suis débutant encore dans ce langue

mon models.py:

class Contact(models.Model): 

contact_owner = models.ForeignKey(User, related_name="contacts") 
contact_name = models.CharField(max_length=20) 
contact_mobile_no = models.CharField(max_length=20) 
select_group = models.CharField(max_length=20, null=True) 

def __unicode__(self): 
    return "contact {contact_owner=%s, contact_name=%s, contact_mobile_no=%s, select_group=%s}" % (self.contact_owner, self.contact_name, self.contact_mobile_no, self.select_group) 
+0

Il est difficile de savoir comment ajouter ces données à votre base de données sans connaître les modèles de votre base de données. À quoi ressemble votre fichier models.py? – David

+0

david, je fais l'édition mineure au fichier csv et veux stocker dans mysql.abubakar sous la colonne owner_name, rooney sous le nom de colonne, les nombres pour la colonne mobile_no et etc.i ont également perdu votre réponse avant ainsi svp vous l'avez écrit again.sorry pour le problème. –

+0

Aussi, vous êtes les paramètres csvreader sont faux. Votre fichier csv est séparé par des virgules et n'est pas séparé de l'espace. De plus, je suis sûr que vous n'utilisez pas | Comme le caractère de citation, faites le csvreader sans les paramètres delimiter et quotechar. jusr un csv.reader régulier (csvfile) devrait fonctionner. –

Répondre

0

Pour tokenizer séparées par une virgule s tring:

>>> a = 'abubakar,rooney,0178222123,student abubakar,rooneyzzz,0178222164' 
>>> b = a.split(',') 
>>> print b 
['abubakar', 'rooney', '0178222123', 'student abubakar', 'rooneyzzz', '0178222164'] 

Voir la réponse de @ wm_eddie pour savoir comment créer une nouvelle entrée dans votre base de données.

+0

Le fractionnement de ',' fonctionne seulement jusqu'à ce que vous ayez une virgule dans une cellule. C'est pourquoi il y a le module csv.Il devrait gérer correctement les virgules à l'intérieur des guillemets et échapper correctement le caractère de citation. On ne sait vraiment pas à quel point il est génial d'avoir un module csv dans la bibliothèque standard avant d'en avoir un soi-même. –

+0

david, abubakar, rooney, 0178222123, étudiant abubakar, rooneyzzz, 0178222164 'vous utilisez est déjà déclaré par vous.how je veux déterminer' un 'du fichier que le fichier est téléchargé.par exemple a = csv. lecteur (csvfile) ou quoi, de lire automatiquement 'abubakar, rooney, 0178222123, étudiant abubakar, rooneyzzz, 0178222164' –

0

Les manuels de Python sont plutôt mauvais. Vous êtes "censé" déduire que parce qu'ils utilisent la chaîne string.join() cette ligne fonctionne comme une liste. Donc, à peu près, il analyse le fichier CSV dans une liste de listes. Il prend soin de toutes les citations désagréables, et s'échappe pour vous.

Vous l'utilisez juste comme vous utilisez un tableau/liste

for row in testReader: 
    model = YourModel() 
    model.property_a = row[0] 
    model.property_b = row[1] 
    model.save() 

Il y a aussi un DictReader qui vous permet d'écrire un plus lisible:

for row in testReader: 
    model = YourModel() 
    model.property_a = row["prop_a"] 
    model.property_b = row["prop_b"] 
    model.save() 
+0

"infer"? Je ne pense pas. http://docs.python.org/library/csv.html#csv.csvreader.next dit "Retourne la prochaine ligne de l'objet itérable du lecteur sous forme de liste" Cela me semble assez clair. –

+0

Les docs le disent clairement, mais le "" .join (ligne) est leur façon d'illustrer que c'est une liste. Une assez mauvaise illustration si vous me demandez. –

0

C'est à peu près ce que nous faisons.

header = 'contact_owner', 'contact_name', 'contact_mobile_number', 'select_group' 
rdr= csv.reader(request.FILES['file']) 
for row in rdr: 
    data = zip(header, row) 
    owner, created = User.get_or_create(data['contact_owner'] 
    data['contact_owner']= owner 
    contact, created = Contact.get_or_create(**data) 
    logger.info("Created %r", contact) 

http://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs

Votre question dit "tokenizer par une virgule". Vos données d'exemple utilisent une virgule. Mais votre code csv.reader montre des espaces. Lequel est-ce?

+0

il devrait être une virgule: P –

Questions connexes