0

我整晚都在试图找到这个问题的答案,但我仍然没有找到明确的答案。通常,当我使用 sqlite3 时,我会使用以下模式:

import sqlite3

db = sqlite3.connect('whatever.db')
cursor = db.cursor()

#do some stuff

cursor.close()

现在我试图加深我对 OOP 和数据库的理解,所以我想我会创建一个控制器对象来与数据库交互。我想出了以下几点:

一个只定义连接和游标的类:

import sqlite3

class coffee_shop_controller:

    def __init__(self):
        self.db = sqlite3.connect("coffeeshop.db")
        self.cursor = self.db.cursor()

    def close(self):
        self.cursor.close()

我将其子类化为我需要的各种控制器。例如:

class customer_controller(coffee_shop_controller):

    """creates a controller to add/delete/amend customer records in the
       coffee shop database"""

    def __init__(self):
        super().__init__()

    def add_customer(self,fn,ln,sa,t,pc,tn):
        sql = """insert into customer
                 (first_name,last_name,street_address,town,post_code,telephone_number)
                 values
                 ('{0}','{1}','{2}','{3}','{4}','{5}')""".format(fn,ln,sa,t,pc,tn)
        self.cursor.execute(sql)
        self.db.commit()

我很欣赏设计模式可能不是很好(接受建议),我确实应该防止 SQL 注入,但关闭连接目前让我很感兴趣。

通过搜索Python 文档,注释行表明我们可以关闭连接,而不是必须。这是正确的吗?我真的不需要麻烦吗?

如果我确实需要打扰,那么我应该做什么似乎存在分歧:

这里有什么确定的吗?该__del__方法对我来说最有意义,但也许这是我的无知。

感谢您提供的任何建议。

亚当。

4

1 回答 1

0

释放不再需要的资源是一种很好的做法。通常,数据库连接非常“昂贵”,我肯定会建议打开连接,执行实际查询并在此之后立即关闭连接。

为了更好地控制这一点,我还建议遵循工作单元设计模式。此外,如果您可以将Unit Of Work与一些好的ORM(例如 SQLAlchemy 或 Django)结合起来,那对您来说会很棒

于 2012-10-01T19:59:31.767 回答