2012-01-05 21 views
8

मुझे अपने डेटास्टोर के सभी रिकॉर्ड्स को फिर से शुरू करने और हटाने की आवश्यकता है। मैं स्थानीय होस्ट पर इसका परीक्षण करने के लिए Google ऐप इंजन लॉन्चर का उपयोग कर रहा हूं। यह कैसे करना है?जीक्यूएल का उपयोग कर रिकॉर्ड कैसे हटाएं?

जब मैं व्यक्ति मॉडल में सभी recors तरीका है कि नष्ट करने के लिए कोशिश कर रहा हूँ:

qObj = Person.all() 
db.delete(qObj) 

मैं त्रुटि BadValueError: Property y must be a str or unicode instance, not a long हो रही है मुझे लगता है कि मॉडल डेटा प्रकार में संघर्ष है।

class Person(db.Model): 
    name = db.StringProperty() 
    x = db.StringProperty() 
    y = db.StringProperty() 
    group = db.StringProperty() 

क्षेत्र y = db.StringProperty() पहले y = db.IntegerProperty() था। इस समय मुझे सभी डीबी रिकॉर्ड फ्लश करने की आवश्यकता है। मैं उसे कैसे कर सकता हूँ?

क्या स्थानीय फ़ाइल को हटाने का अवसर है जो सभी डीबी रिकॉर्ड स्टोर करता है?

+0

जब आप qObj = Person.all() करते हैं, तो आप व्यक्ति वस्तुओं की सूची में qObj सेट कर रहे हैं। जहां तक ​​मुझे पता है, आप उस सूची में डिलीट को कॉल नहीं कर सकते हैं - आपको सूची के माध्यम से फिर से भरना होगा और प्रत्येक ऑब्जेक्ट को अलग से हटा देना होगा। – pinerd314159

+0

http://code.google.com/appengine/docs/python/datastore/functions.html#create_config ... हटाएं (मॉडल) डेटास्टोर से एक या अधिक मॉडल उदाहरण हटा देता है। तर्क: मॉडल एक मॉडल उदाहरण, किसी इकाई के लिए कुंजी, या मॉडल उदाहरणों या इकाइयों की कुंजी को हटाने के लिए सूची (या अन्य पुनरावर्तनीय)। –

+0

मैंने अभी कोशिश की ['db.delete (Person.all())'] (https://developers.google।कॉम/एपेंगेन/डॉक्स/पायथन/डेटास्टोर/फंक्शंस # डिलीट), अपने सटीक 'व्यक्ति' मॉडल का उपयोग करके, और यह पूरी तरह से काम करता है (डीबी से सभी 'व्यक्तियों' ऑब्जेक्ट्स को साफ़ करता है) – bobobobo

उत्तर

8

GQL भाषा केवल संस्थाओं या कुंजी (सीएफ http://code.google.com/appengine/docs/python/datastore/gqlreference.html)

आप इस करना होगा पुनः प्राप्त करने के लिए इस्तेमाल किया जा सकता है:

persons = Person.all() 

for p in persons: 
    p.delete() 

त्रुटि BadValueError: Property y must be a str or unicode instance, not a long के बारे में, आप करना होगा संघर्ष को हल करने के लिए डेटाबेस में सभी डेटा (पूर्णांक से स्ट्रिंग तक) को संशोधित करें।

ऐसा लगता है कि आप सब कुछ हटाना चाहते हैं, तो दूसरा समाधान स्थानीय डेटा पर http://localhost:8080/_ah/admin पर या https://appengine.google.com/ के माध्यम से - और सबकुछ हटा देगा।

आप इस उपयोगी लग सकते: http://code.google.com/appengine/articles/update_schema.html

+0

यह __not सही__ नहीं है। आपको स्पष्ट 'के लिए' की आवश्यकता नहीं है। यह या तो तय किया गया था या कुछ और गलत था – bobobobo

1

यदि आपके पास एक चर है जो डेटाबेस पर एक रिकॉर्ड संग्रहीत करता है तो आप आसानी से हटा सकते हैं()।

है, कहते हैं कि तुम एक इकाई व्यक्तियों कहा जाता है, तो आप कर सकते हैं:

personToDelete = db.GqlQuery("SELECT * FROM Persons WHERE name='Joe'"); 
person = personToDelete[0]; 
person.delete(); 

तुम भी डेटाबेस पुस्तकालय आयात करने के लिए है, लेकिन मैं आपको बस इतना है कि वैसे भी यह देखते हुए कि आप कर रहे हैं यह सोचते हैं रहा हूँ स्पष्ट रूप से डेटाबेस का उपयोग कर।

+0

यह हमें एक त्रुटि देता है: 'क्वेरी' ऑब्जेक्ट नहीं करता है समर्थन अनुक्रमण। हम क्या खो रहे हैं? – Praxiteles

0

बस पहले से ही स्वीकार किए जाते हैं जवाब पर एक उपयोगी सुझाव साझा करने के लिए।

आप db.delete साथ निम्न कर सकते हैं:

persons = Person.all() 
d = [] 
for p in persons: 
    d.append(p) 

db.delete(d) 

इस डाटाबेस के संचालन का एक बहुत बचाता है।

+0

मुझे लगता है कि यह बहुत अक्षम है। आप एक संपूर्ण अन्य सरणी बना रहे हैं, लेकिन आपको इसकी आवश्यकता नहीं है। – bobobobo

+0

इसने एक त्रुटि दी "AttributeError: 'list' ऑब्जेक्ट में कोई विशेषता नहीं है 'हटाएं'" सुझाव? – Praxiteles

संबंधित मुद्दे