2017-08-14 2 views
0

J'ai ajouté une nouvelle colonne à ma table postgresql. Maintenant, je veux ajouter des valeurs à cette nouvelle colonne ajoutée. Les seules commandes que j'ai trouvées permettent d'ajouter des valeurs mais pas dans les lignes choisies de la colonne. Ce que je suis tryin avoir est:Postgresql ajoute des valeurs à une colonne avec une boucle for (sur Python)

cursor.execute('SELECT Column_name FROM Table_name') 
rows = cursor.fetchall() 
cursor.execute('ALTER TABLE Table_name ADD NewColumn_name type') 
for row in rows: 
    #Here I want to have a commands that adds a value (result of a function: func(row)) to every row of the new column, one by one something like: 

    NewColumn_name[i] = func(row) 
    i = i+1 
+0

Qu'est-ce que la clé primaire ou la colonne unique? –

+0

Que fait 'func'? –

Répondre

0

Vous devez exécuter les instructions UPDATE dans le corps de votre boucle. Au lieu de cela:

NewColumn_name[i] = func(row) 

essayer quelque chose comme ça (documentation):

cursor.execute('UPDATE Table_name SET NewColumn_name = %s WHERE id = %s', (func(row),row[0]); 

En supposant première ligne du Table_name est un index primaire.

+0

Il a effectivement travaillé au début (j'ai imprimé les nouvelles valeurs ajoutées) bit alors qu'il était en cours d'exécution se termine par une erreur: ** Erreur SSL SYSCALL: EOF détecté avec python et psycopg ** –

+0

Je suppose qu'il ne peut pas être dû à problème de mémoire, car ils ne sont pas plus de 10000 nouvelles valeurs à ajouter avec la mise à jour Querry! –

+0

Avez-vous lu ce fil? https://stackoverflow.com/questions/24130305/postgres-ssl-syscall-error-eof-detected-with-python-and-psycopg –

0

Vous cherchez update?

update table_name 
    set column_name = ?; 

Remplissez le ? avec la valeur que vous souhaitez (à l'aide d'un paramètre est beaucoup préféré munging la chaîne de requête).