私は一晩中この質問に対する答えを見つけようとしてきましたが、まだ明確な答えに出くわしていません. 通常、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__
メソッドを使用するwith
または_atexit
ここに決定的なものはありますか?この__del__
方法は私にとって最も理にかなっていますが、それは私の無知の話かもしれません。
あなたが提供できる提案をありがとう。
アダム。