2010-09-14 31 views
10

當我試圖在我的活服務器上將數據轉儲到Djanog 1.2.1中的JSON fixture時遇到錯誤。在運行中的服務器上運行MySQL服務器版本5.0.77,並使用phpMyAdmin接口將大量數據導入到我的表中。該網站工作正常,Django管理員響應正常。但是,當我嘗試和實際轉儲對應表中的應用程序的數據我得到這個錯誤:在Django中,試圖轉儲數據時出現「錯誤:無法序列化數據庫」?

$ 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. 

我的Django模型「演出」,我試圖從容貌傾倒這樣的車型.py文件:

就像我說的,Django對數據很好。該網站工作正常,關係似乎運作絕對好。當運行命令得到什麼SQL Django是使用:

$ 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; 

我三重檢查數據,經歷了以確保所有的關係和數據的導入後確定。但是我仍然遇到這個錯誤,三天之後......我堅持要做些什麼。我無法想象「棄用警告」在這裏會成爲一個問題。我真的需要將這些數據轉儲回JSON。

非常感謝任何幫助。

+0

使用--traceback運行以查看潛在錯誤 – 2010-09-15 09:10:05

+0

您是否設法找到錯誤?我跑了類似的情況試圖轉儲通過'inspectdb'獲得的一堆模型......我沒有得到'DoesNotExists'(可能是由於較新的版本)。但Django未能查找現有的庫侖... – tutuca 2016-04-24 05:21:00

回答

10

可能類似於this

與運行:

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

要看到潛在的錯誤。

3

我曾經遇到類似的問題,其中的錯誤信息和你一樣迷人。原因是我的服務器上缺少內存。似乎在json中生成轉儲相當昂貴。我只有60meg的內存(在djangohosting.ch),並不足以獲得mysql數據庫的轉儲,而mysql數據庫的轉儲只有1meg。

我能夠通過觀察python進程在第一個命令行中運行manage.py dumpdata的同時,在第二個命令行中使用top命令達到60meg限制找到答案。

我的解決方案:獲取mysql轉儲,然後將其加載到我的臺式機上,然後生成json轉儲。這就是說,爲了備份目的,mysql轉儲足夠了。

的命令來獲得一個MySQL轉儲如下:

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

這就是說,你的問題可能是完全不同的。您應該仔細查看每個有您的位置表的外鍵的表,並檢查是否沒有指向先前刪除位置的字段。不幸的是,MySQL在維護引用完整性方面非常糟糕,你不能指望它。

相關問題