2010-09-14 17 views
10

Tôi gặp lỗi khi cố gắng kết xuất dữ liệu vào một tài liệu JSON trong Djanog 1.2.1 trên máy chủ trực tiếp của tôi. Trên máy chủ trực tiếp, nó chạy MySQL Server phiên bản 5.0.77 và tôi đã nhập rất nhiều dữ liệu vào các bảng của mình bằng giao diện phpMyAdmin. Trang web hoạt động tốt và quản trị viên Django trả lời như bình thường. Nhưng khi tôi cố gắng và thực sự đổ dữ liệu của các ứng dụng tương ứng với bảng tôi nhận được lỗi này:Trong Django, nhận được một "Lỗi: Không thể tuần tự hóa cơ sở dữ liệu" khi cố gắng để đổ dữ liệu?

$ python manage.py dumpdata --indent=2 gigs > fixtures/gigs_100914.json 
/usr/local/lib/python2.6/site-packages/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated 
    from sets import ImmutableSet 
Error: Unable to serialize database: Location matching query does not exist. 

My Django mô hình cho 'biểu diễn' mà tôi đang cố gắng để đổ từ vẻ bề ngoài như thế này trong các mô hình .py file:

Như tôi đã nói, Django là tốt với dữ liệu. Trang web hoạt động tốt và các mối quan hệ dường như hoạt động hoàn toàn tốt. Khi chạy lệnh để nhận được những gì SQL Django đang sử dụng:

$ python manage.py sql gigs 
/usr/local/lib/python2.6/site-packages/MySQLdb/__init__.py:34: DeprecationWarning: the sets module is deprecated 
    from sets import ImmutableSet 
BEGIN;CREATE TABLE `gigs_location` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `name` varchar(120) 
) 
; 
CREATE TABLE `gigs_venue` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `name` varchar(120), 
    `contact` varchar(250), 
    `url` varchar(60) 
) 
; 
CREATE TABLE `gigs_gig` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    `date` date, 
    `details` varchar(250), 
    `location_id` integer NOT NULL, 
    `venue_id` integer NOT NULL 
) 
; 
ALTER TABLE `gigs_gig` ADD CONSTRAINT `venue_id_refs_id_3d901b6d` FOREIGN KEY (`venue_id`) REFERENCES `gigs_venue` (`id`); 
ALTER TABLE `gigs_gig` ADD CONSTRAINT `location_id_refs_id_2f8d7a0` FOREIGN KEY (`location_id`) REFERENCES `gigs_location` (`id`);COMMIT; 

Tôi đã kiểm tra dữ liệu ba lần để đảm bảo tất cả các mối quan hệ và dữ liệu đều ổn sau khi nhập. Nhưng tôi vẫn nhận được lỗi này, ba ngày trên ... Tôi bị mắc kẹt với những gì phải làm về nó. Tôi không thể tưởng tượng "DeprecationWarning" sẽ là một vấn đề ở đây. Tôi thực sự cần phải kết xuất dữ liệu này dưới dạng JSON.

Rất cám ơn vì đã trợ giúp.

+0

Chạy bằng --trả lại để xem lỗi cơ bản –

+0

Bạn có tìm thấy lỗi không ?. Tôi đã chạy trong một tình huống tương tự cố gắng để đổ một loạt các mô hình thu được thông qua 'inspectdb' ... Tôi không nhận được' DoesNotExists' mặc dù (có thể là do phiên bản mới hơn). Nhưng django không tra cứu một coulmn hiện có ... – tutuca

Trả lời

10

Có thể tương tự như this.

Run nó với:

python manage.py dumpdata --indent=2 -v 2 --traceback gigs 

Để xem các lỗi cơ bản.

3

Tôi đã từng gặp phải sự cố tương tự khi thông báo lỗi giống như thông báo lỗi của bạn. Nguyên nhân là do thiếu bộ nhớ trên máy chủ của tôi. Dường như việc tạo ra các bãi chứa trong json khá tốn kém bộ nhớ. Tôi chỉ có 60meg bộ nhớ (tại djangohosting.ch) và nó là không đủ để có được một bãi chứa cho một DB mysql mà bãi chứa mysql chỉ là 1meg.

Tôi có thể tìm hiểu bằng cách xem quá trình python đạt giới hạn 60meg bằng lệnh trên cùng trong dòng lệnh thứ hai trong khi chạy manage.py dumpdata trong lần đầu tiên.

Giải pháp của tôi: lấy mysql dump và sau đó tải nó trên máy tính để bàn của tôi, trước khi tạo ra các bãi chứa json. Điều đó nói rằng, cho mục đích sao lưu, các bãi chứa mysql là đủ.

Lệnh để có được một bãi chứa mysql được như sau:

mysqldump -p [password] -u [username] [database_name] > [dump_file_name].sql 

Điều đó nói rằng, vấn đề của bạn có thể là hoàn toàn khác nhau. Bạn thực sự nên xem xét mọi bảng có khóa ngoài vào bảng Vị trí của bạn và kiểm tra xem có trường nào trỏ đến vị trí đã xóa trước đó hay không. Thật không may MySQL là rất xấu lúc duy trì tính toàn vẹn tham chiếu, và bạn không thể dựa vào nó.

Các vấn đề liên quan