2011-05-31 5 views
0

Je me demande comment je peux faire une mise à jour groupée en utilisant MySQL et Python. Mon exigence est commeDéclaration de mise à jour groupée de MySQL en Python

for x in range(0,100): 
NNN = some calculation 
ABC = some calculation 
query = update XXX set value = NNN, name = ABC where id = x 
con.execute(query) 

Le problème ici est qu'il exécute 100 requêtes DB et rend le processus de mise à jour lente. Est-il possible d'avoir un appel DB? Je connais la syntaxe d'insertion en masse sur MySQL mais elle semble ne pas fonctionner avec l'instruction update.

+0

c'est un calcul mathématique en utilisant python par exemple ABC = (200 * 2.5)/22 et NNN = ABC * 100/10 genre de –

+0

Ils devraient facilement être convertis en calculs SQL. – Rasika

Répondre

0

Je suis d'accord que nous pouvons faire le calcul sur la requête. Mais ce n'est pas flexible pour le changement et la maintenance. Aller pour une procédure stockée MYSQL est une bonne option. Mais je l'ai résolu dans les scripts python en utilisant les étapes suivantes. 1. Créé une table temporaire pour contenir les colonnes A, B et id. Python & Prise en charge de MySQL Insertion en masse (voir petefreitag.com/item/379.cfm). 2. émettre une instruction de mise à jour simple pour mettre à jour les champs en utilisant id dans where condition. C'est corrigé mon problème

0

Selon le MySQL update manual, vous pouvez faire

UPDATE tableX SET NNN = calculation, 
    ABC = (SELECT whatever FROM whatevertable WHERE condition) 
WHERE x >=0 AND x <=100 
+0

Le calcul est un peu complexe qu'il ne peut pas être fait dans l'instruction mysql elle-même. les calculs NNN et ABC sont également interdépendants. –

+0

Vous pourriez toujours être en mesure de le compresser en une seule requête dans les deux cas. Si vous mettez plus de détails, nous pourrions peut-être vous aider. J'ai fait des mises à jour interdépendantes complexes sur une seule requête qui augmente considérablement l'efficacité de l'application. – Rasika

+0

J'ai une requête comme 'select id, value1, value2 de TABLEA' result = cursor.fetchall(): pour la ligne dans les résultats: X = caculations (cela dépend de quelques autres de l'instruction select et d'autres valeurs) et Y = X + (encore une fois les valeurs d'autres instructions et calculs de sélection) update TABLEB set A = X, B = Y où id = row ['id'] –

Questions connexes