我整晚都在试图找到这个问题的答案,但我仍然没有找到明确的答案。通常,当我使用 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__
方法 - 使用
with
或atexit
这里有什么确定的吗?该__del__
方法对我来说最有意义,但也许这是我的无知。
感谢您提供的任何建议。
亚当。