web-dev-qa-db-fra.com

psycopg2 n'insère pas réellement de données

J'ai besoin d'insérer des données JSON de la tornade aux postgres, alors voici un test comme celui-ci:

from psycopg2 import connect

conn = connect("user='pguser' Host='localhost' dbname='pgdb' password='pgpass'")
cursor = conn.cursor()

data = '[{"id":"sdf","name":"wqe","author":"vb"}]'

for row in eval(data):
  print row
  cursor.execute("""INSERT INTO books(id,name,author) VALUES('%s','%s','%s')""" % \
        (row['id'], row['name'], row['author'])
  )

>>> cursor.execute("SELECT * FROM books")
>>> cursor.fetchall()
[('sdf', 'wqe', 'vb')]
>>> 
$> psql -d pgdb -U pguser -W
Password for user pguser: 
psql (9.1.6)
Type "help" for help.

pgdb=> select * from books;
 id | name | author 
----+------+--------
(0 rows)

Comme vous pouvez le voir après avoir fait select dans python Shell, il y a des données, mais dans psql il y a 0 lignes! Que puis-je faire de mal?

Python 2.7.2+

51
juk

Vous n'avez pas validé la transaction.

Psycopg2 ouvre automatiquement une transaction et vous devez lui dire de valider afin de rendre les données visibles aux autres sessions.

Voir la FAQ psycopg2 et la méthode connection.commit() .

151
Craig Ringer