2012-12-05 10 views
34

muszę wstawić dane JSON od tornada do PostgreSQL, więc o to badanie tak:psycopg2 nie faktycznie wstawiania danych

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) 

Jak widać po zrobieniu select w Pythona skorupach, tam jakieś dane, ale w psql jest 0 rzędów! Co mogę robić źle?

Python 2.7.2+

+0

UDOSTĘPNIANIE WSZYSTKICH PRZYWILEJÓW NA BAZY DANYCH pgdb do pguser; a zmiana peer na zaufanie w hba.conf nie pomogła. – juk

+2

Obie te próby rozwiązania problemu, którego nie masz. Otrzymywałbyś błędy uprawnień, gdyby któryś z tych problemów był. –

Odpowiedz

103

nie popełnił transakcję.

Psycopg2 automatycznie otwiera transakcję i musisz nakazać jej zatwierdzenie, aby dane były widoczne dla innych sesji.

Zobacz the psycopg2 FAQ i connection.commit() method.

+8

Niektóre odpowiedzi są warte 100 głosów w górę - nawet po 4 latach. To jedna z nich! :) –

+3

Samouczek i dokumenty nic o tym nie mówią, dziękuję! – rjurney

+0

@rjurney Prześlij żądanie ściągnięcia do repozytorium psycopg2, aby dodać je :) w najbardziej logicznym miejscu, w którym spodziewałbyś się znaleźć je w dokumentach. –

Powiązane problemy