我整晚都试图找到这个问题的答案,但我仍然没有得到明确的答案。通常当我使用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 docs注释行表明我们 可以 关闭连接,而不是我们 必须 即可。这是正确的吗?我真的不需要打扰吗?
如果我确实需要打扰,那么我应该做的事情似乎有分歧:
这里有什么确定的吗? __del__
方法对我来说最有意义,但也许这是我无知的谈话。
感谢您提供的任何建议。
亚当。
答案 0 :(得分:0)
释放您不再需要的资源是一种很好的做法。通常情况下,数据库连接非常“昂贵”,我肯定会建议打开连接,执行实际查询并在此之后立即关闭连接。
为了更好地控制这一点,我还建议您遵循工作单元设计模式。此外,如果您可以将工作单元与一些优秀的 ORM (例如SQLAlchemy或Django)结合起来,那将非常适合您