2012-08-24 9 views
12

Poniższy kod nie wywołuje błędu. Ale nie umieszcza żadnych wartości w mojej bazie danych. Usunięto wszystkie ograniczenia z tabeli oprócz indeksu klucza podstawowego. Dwa pola są oboma łańcuchami. Jakieś pomysły? Najbardziej mylące jest to, że żadne błędy nie są rejestrowane.Brak błędów zarejestrowanych z błędem Postgres/Psycopg2 copy_from

conn = psycopg2.connect("dbname=<mydbname> user=postgres password=<mypassword>") 
cur = conn.cursor() 
output = StringIO.StringIO() 
output.write('Citizen Caine\tMy_API_id\n') 
cur.copy_from(output, 'movie', columns=('title','api_id')) 
conn.commit() 
+1

Gdzie jest twój commit()? –

+0

To dobry haczyk, ale został pominięty tylko w moim pierwszym szkicu tutaj. Zatwierdzenie jest w moim kodzie i nie aktualizuje się. –

Odpowiedz

17

Zmagałem się również z tym. Niektóre ukryta jest wiedza, że ​​trzeba zrobić:

output.seek(0) #put the position of the buffer at the beginning 

po write, lub jeśli jesteś w ruchu z bazy do bazy, po wykonaniu copy_to.

Łatwo zapomnieć, że StringIO obiekty mają te same metody i atrybuty file object.

+2

To się udało. DZIĘKUJĘ CI! –

+0

Myślę, że tak. Straciłem połączenie podczas przesyłania komentarza. –