web-dev-qa-db-fra.com

Python psycopg2 ne s'insère pas dans la table postgresql

J'utilise ce qui suit pour essayer d'insérer un enregistrement dans une table de base de données postgresql, mais cela ne fonctionne pas. Je ne reçois aucune erreur, mais il n'y a aucun enregistrement dans le tableau. Ai-je besoin d'un commit ou quelque chose? J'utilise la base de données postgresql qui a été installée avec l'installation de Bitnami djangostack.

import psycopg2

try:
    conn = psycopg2.connect("dbname='djangostack' user='bitnami' Host='localhost' password='password'")
except:
    print "Cannot connect to db"

cur = conn.cursor()

try:
    cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""")
except:
    print "Cannot insert"
28
Superdooperhero

Si vous ne souhaitez pas avoir à valider chaque entrée dans la base de données, vous pouvez ajouter la ligne suivante:

conn.autocommit = True

Ainsi, votre code résultant serait:

import psycopg2

try:
    conn = psycopg2.connect("dbname='djangostack' user='bitnami' Host='localhost' password='password'")
    conn.autocommit = True
except:
    print "Cannot connect to db"

cur = conn.cursor()

try:
    cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""")
except:
    print "Cannot insert"
57
aright

Il s'avère que j'avais besoin de conn.commit() à la fin

32
Superdooperhero

psycopg2 est API Python DB - compatible, donc la fonction de validation automatique est désactivée par défaut. Vous devez appeler conn.commit pour valider toute transaction en attente dans la base de données. Comme les connexions (et les curseurs) sont des gestionnaires de contexte, vous pouvez simplement utiliser l'instruction with pour valider/annuler automatiquement une transaction à la sortie du contexte:

with conn, conn.cursor() as cur:  # start a transaction and create a cursor
    cur.execute(sql)

De la docs :

Lorsqu'une connexion quitte le bloc with, si aucune exception n'a été levée par le bloc, la transaction est validée. En cas d'exception, la transaction est annulée.

Lorsqu'un curseur quitte le bloc with, il est fermé, libérant toute ressource éventuellement associée. L'état de la transaction n'est pas affecté.

7
Eugene Yarmash