2011-11-13 16 views
5

Tôi đang làm việc trên một ứng dụng nằm trong số Django. Tôi đang cố gắng lưu trữ một số cấu trúc dữ liệu e.g. dictionary trong MySQL db. Vì vậy, tôi sử dụng mô-đun Python Pickle. Nó hoạt động tốt khi tôi lưu trữ nó trong db sử dụng pickle.dumps(some_structure). Trường DB của tôi là chế độ longblobbinary.Bỏ chọn khóa tải không hợp lệ, '{'

Nhưng khi tôi truy cập vào các lĩnh vực của đối tượng mô hình trong django:

obj = someModel.get(pk=1) 
some_structure = obj.field 
content = pickle.loads(some_structure) 

nó làm tăng lỗi sau:

UnpicklingError: invalid load key, '{'. 

Xin hãy giúp tôi, tôi đã cố gắng google nhưng nó Does'nt giúp tôi , cũng có một số Question tương tự nhưng nó không liên quan đến vấn đề của tôi khi tôi lưu trữ trong db.

+0

Tôi khuyên bạn nên tẩy dữ liệu để lưu trữ dữ liệu trong cơ sở dữ liệu không phải là cách chính xác để thực hiện việc này. Bạn nên lưu trữ dữ liệu của bạn trong cơ sở dữ liệu một cách chính xác, chuyển đổi dữ liệu của bạn thành các bảng và các trường. –

+0

Dữ liệu nằm trong 'hệ thống phân cấp phức tạp (từ điển lồng nhau) '. Tôi không thể lưu nó dưới dạng các bảng và các trường. Dữ liệu là kết quả của một số quy trình mà sau này tôi cần xử lý trong django trên một 'Chế độ xem' khác. –

+1

Sau đó, JSON có lẽ là một định dạng tốt hơn so với dưa chuột. JSON là nền tảng chéo, trong khi dưa được thực hiện cụ thể. –

Trả lời

11

Tôi gặp phải lỗi này và tôi phát hiện ra rằng đó là vì tôi đã cố gắng giải quyết một cái gì đó mà ban đầu không được ngâm.

Cụ thể hơn, tôi đã lưu trữ một dict Python mà không cần chọn nó, dẫn đến ký tự ban đầu {.

Vì vậy, để giải quyết vấn đề, bạn nên thử một trong hai:

  • Không unpickling chuỗi khi thu hồi từ các kho dữ liệu, hoặc
  • Thẩm định rằng đối tượng đang được ngâm trước khi chèn vào kho dữ liệu