2010-10-01 4 views
3

Je souhaite mettre à jour une table client avec une feuille de calcul de notre système comptable. Malheureusement, je ne peux pas effacer les données et recharger tout cela, car il y a quelques enregistrements dans la table qui ne sont pas dans les données importées (ne demandez pas).Mise à jour en bloc d'une table

Pour 2000 enregistrements cela prend environ 5 minutes, et je me demandais s'il y avait une meilleure façon de le faire.

for row in data: 

     try: 

      try: 
       customer = models.Retailer.objects.get(shared_id=row['Customer']) 
      except models.Retailer.DoesNotExist: 
       customer = models.Retailer() 

      customer.shared_id = row['Customer'] 
      customer.name = row['Name 1'] 
      customer.address01 = row['Street'] 
      customer.address02 = row['Street 2'] 
      customer.postcode = row['Postl Code'] 
      customer.city = row['City'] 

      customer.save() 

     except: 
      print formatExceptionInfo("Error with Customer ID: " + str(row['Customer'])) 

Répondre

1

J'ai eu un certain succès en utilisant cet extrait de mise à jour en vrac: http://djangosnippets.org/snippets/446/

Il est un peu vieillot, mais il a travaillé sur django 1.1, donc je suppose que vous pouvez toujours le faire fonctionner. Si vous cherchez un moyen rapide de faire un insert en vrac, c'est le plus rapide (je ne suis pas sûr que je le ferais pour une utilisation régulière sans sérieusement tester les performances).

+0

Merci pour cela ... Je vais jeter un oeil. La mise à jour – alj

2

Regardez ma réponse ici: Django: form that updates X amount of models

La méthode QuerySet a update() - repos est expliqué dans le lien ci-dessus.

+0

définit la valeur _same_ pour tous les éléments du jeu de queues. Je ne pense pas que ce soit ce que veut le PO. –

+0

@Manoj: eh - vous avez raison bien sûr - me semble que j'ai mal compris la question .. – bx2

+0

Yep. C'est vrai. Chaque enregistrement aura des données différentes. Merci quand même. – alj

1

J'ai fait une tentative terriblement grossière sur une solution à ce problème, mais ce n'est pas encore fini et il ne supporte pas de travailler avec des objets django orm directement - pour le moment.

http://pypi.python.org/pypi/dse/0.1.0

It `s pas été correctement Testet et laissez-moi savoir si vous avez des suggestions sur la façon de l'améliorer. Utiliser le django orm pour faire des choses comme ça est terrible.

Thomas

+0

Merci pour la suggestion. ALJ – alj

Questions connexes