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"
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"
Il s'avère que j'avais besoin de conn.commit()
à la fin
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é.