python数据库实现

2024-10-01 04:48:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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代码中执行嵌套事务,我用begin命令开始一组命令,然后用commit语句提交它们。提交应该提交开始的所有事务。但是,回滚应该将更改恢复到最近的BEGIN。我无法想出一个合适的解决办法。在


Tags: nameselfcmd数据库dbifvaluemain
2条回答

这些都可以在内置的sqllite模块中免费使用。sqllite的提交和回滚讨论得比我能理解的更详细here

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

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

相关问题 更多 >