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+
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()
.