【问题标题】:python database implementationpython数据库实现
【发布时间】:2013-06-28 20:21:10
【问题描述】:

我正在尝试在 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。我无法为此提出合适的解决方案。

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

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

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

    【讨论】:

    • 这正是我想要的。非常感谢您的回答。
    【解决方案2】:

    如果您将此作为学术练习,您可能需要查看Python Cookbook 上的Rudimentary Database Engine 食谱。它包括很多类,以促进您对 SQL 引擎的期望。

    • 数据库用于创建不支持事务的数据库实例。
    • Database2 继承自 Database 并提供表事务。
    • Table 实现了数据库表以及各种可能的交互。

    其他几个类充当实用程序来支持通常支持的一些数据库操作。

    • LikeNotLike 实现了其他引擎中的 LIKE 运算符。
    • datedatetime 是可用于数据库列的特殊数据类型。
    • DatePartMIDFORMAT 在某些情况下允许选择信息。

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

    【讨论】:

    • 感谢您的回答。我想为一个简单的数据库实现我自己的 python 代码。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-29
      • 2013-04-18
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      相关资源
      最近更新 更多