2013-06-28 4 views
7

मैं अजगर में एक साधारण डेटाबेस प्रोग्राम को लागू करने की कोशिश कर रहा हूं। मैं बिंदु जहां मैं db के तत्वों को शामिल किया है करने के लिए मिल, मूल्यों, आदि बदलपायथन डेटाबेस कार्यान्वयन

class db: 
    def __init__(self): 
      self.database ={} 

    def dbset(self, name, value): 
      self.database[name]=value 

    def dbunset(self, name): 
      self.dbset(name, 'NULL') 

    def dbnumequalto(self, value): 
      mylist = [v for k,v in self.database.items() if v==value] 
      return mylist 

def main(): 
    mydb=db() 
    cmd=raw_input().rstrip().split(" ") 
    while cmd[0]!='end': 
      if cmd[0]=='set': 
        mydb.dbset(cmd[1], cmd[2]) 
      elif cmd[0]=='unset': 
        mydb.dbunset(cmd[1]) 
      elif cmd[0]=='numequalto': 
        print len(mydb.dbnumequalto(cmd[1])) 
      elif cmd[0]=='list': 
        print mydb.database 
      cmd=raw_input().rstrip().split(" ") 

if __name__=='__main__': 
    main() 

अब, एक अगले कदम के रूप में मैं इस अजगर के भीतर नेस्टेड लेनदेन करने के लिए सक्षम होना चाहता हूँ code.I शुरू एक BEGIN आदेश के साथ कमांड का सेट करें और फिर उन्हें COMMIT कथन के साथ प्रतिबद्ध करें। एक प्रतिबद्धता शुरू होने वाले सभी लेनदेन को करना चाहिए। हालांकि, रोलबैक को हालिया BEGIN में परिवर्तनों को वापस लेना चाहिए। मैं इसके लिए एक उपयुक्त समाधान के साथ आने में सक्षम नहीं हूँ।

def dbset(self, name, value): 
    self.transaction.append((name, self.database.get(name))) 
    self.database[name]=value 

def rollback(self): 
    # undo all changes 
    while self.transaction: 
     name, old_value = self.transaction.pop() 
     self.database[name] = old_value 

def commit(self): 
    # everything went fine, drop undo information 
    self.transaction = [] 

उत्तर

4

एक साधारण दृष्टिकोण एक "लेन-देन" सूची सभी जानकारी आप रोल-बैक लंबित परिवर्तनों में सक्षम होना चाहिए युक्त रखना है । प्रतिबद्ध और sqllite के लिए पुनरावर्तन अधिक विस्तार से चर्चा कर रहे हैं की तुलना में मैं समझ सकता हूँ here

+0

वही था जो मैं ढूंढ रहा था। उत्तर के लिए बहुत बहुत धन्यवाद। –

0

यह सब sqllite मॉड्यूल में बनाया में मुक्त करने के लिए उपलब्ध है:

0

आप एक शैक्षणिक अभ्यास के रूप में यह कर रहे हैं, तो आप अजगर कुकबुक पर Rudimentary Database Engine नुस्खा बाहर की जाँच कर सकते हैं। एसक्यूएल इंजन से आप क्या उम्मीद कर सकते हैं इसकी सुविधा के लिए इसमें कुछ कक्षाएं शामिल हैं।

  • डेटाबेस लेनदेन समर्थन के बिना डेटाबेस उदाहरण बना रहा है।
  • डेटाबेस 2डेटाबेस से विरासत और तालिका लेनदेन प्रदान करता है।
  • तालिका विभिन्न संभावित इंटरैक्शन के साथ डेटाबेस टेबल लागू करता है।

कई अन्य वर्ग कुछ डेटाबेस क्रियाओं का समर्थन करने के लिए उपयोगिता के रूप में कार्य करते हैं जो सामान्य रूप से समर्थित होंगे।

  • की तरह और NotLike तरह ऑपरेटर अन्य इंजनों में पाया लागू।
  • दिनांक और डेटाटाइम डेटाबेस कॉलम के लिए उपयोग किए जाने वाले विशेष डेटा प्रकार हैं।
  • DatePart, मध्य, और प्रारूप कुछ मामलों में जानकारी चयन की अनुमति।

वर्गों के अलावा, वहाँ के लिए कार्य परीक्षण/प्रदर्शनों के साथ संचालन में शामिल हों कर रहे हैं।

+0

उत्तर के लिए धन्यवाद। मैं एक साधारण डेटाबेस के लिए अपने खुद के पायथन कोड को लागू करने के लिए देख रहा था। –

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