2013-06-28 46 views
7

Tôi đang cố triển khai một chương trình cơ sở dữ liệu đơn giản trong python. Tôi nhận được đến điểm mà tôi đã thêm yếu tố để các db, thay đổi các giá trị, vvtriển khai cơ sở dữ liệu python

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() 

Bây giờ, như một bước tiếp theo tôi muốn để có thể làm giao dịch lồng nhau trong python này code.I bắt đầu một thiết lập các lệnh bằng lệnh BEGIN và sau đó cam kết chúng với câu lệnh COMMIT. Cam kết phải cam kết tất cả các giao dịch bắt đầu. Tuy nhiên, một rollback nên hoàn nguyên các thay đổi trở lại BEGIN gần đây. Tôi không thể đưa ra một giải pháp thích hợp cho việc này.

Trả lời

4

Một phương pháp đơn giản là để giữ một "giao dịch" danh sách chứa tất cả các thông tin mà bạn cần để có thể cuộn lại thay đổi chưa hoàn:

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 = [] 
+0

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn rất nhiều vì câu trả lời. –

0

Đây là tất cả có sẵn miễn phí trong xây dựng trong sqllite mô-đun . Các cam kết và rollbacks cho sqllite được thảo luận chi tiết hơn tôi có thể hiểu here

0

Nếu bạn đang làm điều này như một bài tập học tập, bạn có thể muốn kiểm tra các công thức Rudimentary Database Engine trên Python Cookbook. Nó bao gồm khá một vài lớp để tạo điều kiện cho những gì bạn có thể mong đợi từ một công cụ SQL.

  • Cơ sở dữ liệu là tạo các trường hợp cơ sở dữ liệu không có hỗ trợ giao dịch.
  • Cơ sở dữ liệu2 được thừa kế từ Cơ sở dữ liệu và cung cấp các giao dịch bảng.
  • Bảng triển khai các bảng cơ sở dữ liệu cùng với các tương tác có thể có khác nhau.

Một số lớp khác hoạt động như các tiện ích hỗ trợ một số hành động cơ sở dữ liệu thường được hỗ trợ.

  • Giống nhưNotLike thực hiện các hành NHƯ tìm thấy trong công cụ khác.
  • ngàydatetime là loại dữ liệu đặc biệt có thể sử dụng cho cột cơ sở dữ liệu.
  • DATEPART, MIDFORMAT cho phép lựa chọn thông tin trong một số trường hợp.

Ngoài các lớp học, có các chức năng cho các hoạt động JOIN cùng với các bài kiểm tra/trình diễn.

+0

Cảm ơn câu trả lời. Tôi đã tìm cách để thực hiện mã python của riêng tôi cho một cơ sở dữ liệu đơn giản. –

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