2010-09-14 11 views
10

मुझे एक त्रुटि मिल रही है जब मैं अपने लाइव सर्वर पर Djanog 1.2.1 में JSON फ़िक्स्चर में डेटा डंप करने का प्रयास कर रहा हूं। लाइव सर्वर पर यह 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 डेटा के साथ ठीक है। साइट ठीक काम करती है और रिश्ते बिल्कुल ठीक काम करने लगते हैं। जब एक रन कमांड क्या एसक्यूएल 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

अंतर्निहित त्रुटि देखने के लिए इसे ट्रैक करें - –

+0

क्या आपको त्रुटि मिल गई? मैं 'इंस्पेक्टडबी' के माध्यम से प्राप्त मॉडलों का एक गुच्छा डंप करने की कोशिश कर रहे एक समान परिस्थिति में भाग गया हूं ... मुझे 'DoNotExists' नहीं मिलता है (हालांकि नए संस्करण के कारण हो सकता है)। लेकिन django एक मौजूदा coulmn देखने में विफल रहता है ... – tutuca

उत्तर

10

this के समान कुछ हो सकता है।

भागो इसके साथ:

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

अंतर्निहित त्रुटि को देखने के लिए।

3

मैं एक बार एक ही समस्या में भाग गया जहां त्रुटि संदेश आपके रूप में मस्तिष्ककारी था। कारण मेरे सर्वर पर स्मृति की कमी थी। ऐसा लगता है कि जेसन में उत्पन्न डंप काफी मेमोरी है। मेरे पास केवल 60 मेगाहर्ट्ज मेमोरी थी (djangohosting.ch पर) और यह एक MySQL डीबी के लिए डंप प्राप्त करने के लिए पर्याप्त नहीं था जिसके लिए mysql डंप केवल 1meg था।

मैं पहली बार manage.py dumpdata चलाते समय पाइथन प्रक्रिया को दूसरी कमांड लाइन में शीर्ष कमांड का उपयोग करके 60meg सीमा को हिट करके देख सकता था।

मेरा समाधान: mysql डंप प्राप्त करें और फिर जेसन डंप उत्पन्न करने से पहले इसे अपने डेस्कटॉप पीसी पर लोड करें। उस ने कहा, बैकअप उद्देश्यों के लिए, MySQL डंप पर्याप्त हैं।

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

जिसके अनुसार, आपकी समस्या को पूरी तरह से अलग हो सकता है:

आदेश एक mysql डंप पीछा कर रहा है पाने के लिए। आपको वास्तव में अपनी तालिका तालिका में एक विदेशी कुंजी रखने वाली प्रत्येक तालिका को देखना चाहिए, और जांचें कि पहले हटाए गए स्थान पर कोई फ़ील्ड इंगित नहीं है या नहीं। दुर्भाग्यवश MySQL रेफरेंसियल अखंडता को बनाए रखने में बहुत बुरा है, और आप इस पर भरोसा नहीं कर सकते हैं।