python数据库实现

python数据库实现,python,python-2.7,Python,Python 2.7,我正在尝试用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')

我正在尝试用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()

现在,作为下一步,我希望能够在这个python代码中执行嵌套事务。提交应该提交开始的所有事务。但是,回滚应该将更改恢复到最近的开始。我无法为此找到合适的解决方案。

一个简单的方法是保留一个“事务”列表,其中包含回滚挂起的更改所需的所有信息:

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

这一切都可以在内置模块中免费获得。sqllite的提交和回滚的讨论比我所能理解的更为详细

如果您将此作为一个学术练习,您可能希望查看Python烹饪书上的配方。它包括许多类,以便于您从SQL引擎中获得所需的功能

  • 数据库用于创建不支持事务的数据库实例
  • Database2继承自数据库,并提供表事务
  • 实现数据库表以及各种可能的交互
其他几个类充当实用程序,以支持通常支持的某些数据库操作

  • LikeNotLike执行其他发动机中的Like运算符
  • datedatetime是可用于数据库列的特殊数据类型
  • DatePartMIDFORMAT允许在某些情况下选择信息

除了类之外,还有用于连接操作的函数以及测试/演示。

这正是我想要的。非常感谢你的回答。谢谢你的回答。我想为一个简单的数据库实现我自己的python代码。