2012-08-24 22 views
12

Đoạn mã sau không gợi ra lỗi. Nhưng nó cũng không đặt bất kỳ giá trị nào trong cơ sở dữ liệu của tôi. Đã thực hiện tất cả các ràng buộc ngoài bảng trừ chỉ mục trên khóa chính. Hai trường là cả hai chuỗi. Ý tưởng nào? Điều khó hiểu nhất là không có lỗi nào được ghi lại.Không có lỗi nào được ghi với thất bại 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

đâu cam kết của bạn()? –

+0

Đó là một đánh bắt tốt nhưng nó chỉ bị bỏ qua từ bản nháp đầu tiên của tôi ở đây. Cam kết là trong mã của tôi và nó không cập nhật. –

Trả lời

17

Tôi cũng phải vật lộn với điều này. Một số kiến ​​thức ẩn là bạn phải làm một:

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

sau write của bạn, hoặc nếu bạn đang di chuyển từ cơ sở dữ liệu cơ sở dữ liệu, sau khi bạn làm một copy_to.

Thật dễ dàng để quên rằng StringIO đối tượng có tất cả các phương pháp tương tự và các thuộc tính của một file object.

+2

Điều đó đã xảy ra. CẢM ƠN BẠN! –

+0

Tôi nghĩ là tôi đã làm. Tôi bị mất kết nối khi gửi bình luận. –