Python psycopg2 n'insérant 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 ça ne marche pas. Je ne reçois pas toutes les erreurs, mais il n'y a pas d'enregistrements dans la table. Ai-je besoin d'une validation ou quelque chose? J'utilise la base de données postgresql qui a été installée avec L'installation 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"
25
demandé sur Eugene Yarmash 2013-08-06 02:31:53
la source

3 ответов

Si vous ne voulez pas avoir à s'engager, à chaque entrée de 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"
51
répondu aright 2013-08-14 20:33:21
la source

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

29
répondu Superdooperhero 2013-08-06 02:35:49
la source

psycopg2Python DB API conforme, donc la fonctionnalité auto-commit est désactivée par défaut. Vous devez appeler conn.commit pour engager toute transaction en attente dans la base de données. Comme connections (et curseurs) sont des gestionnaires de contexte, vous pouvez simplement utiliser le with déclaration automatiquement commit/rollback transaction en quittant le contexte:

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

docs:

quand une connexion sort du with bloc, si aucune exception n'a été soulevées par le bloc, la transaction est validée. En cas de exception, la transaction est annulée.

quand un curseur sort du with bloc est fermé, la libérant de toute ressources éventuellement associés. L'état de la transaction n'est pas affecté.

3
répondu Eugene Yarmash 2017-11-06 15:11:29
la source

Autres questions sur