6

sqlite3 をベースとしてアプリケーション用のデータベース ライブラリを構築しています。私はそれを次のように構造化したい:

デシベル/
    __init__.py
    users.py
    blah.py
    etc.py    

したがって、Pythonでこれを行います:

import db
db.users.create('username', 'password')

データベース接続の処理方法について、分析麻痺に苦しんでいます (ああ、いや!)。私は本当にこれらのモジュールでクラスを使用したくありません.同じ方法で同じデータベースをすべて操作できる一連の「ユーザー」オブジェクトを作成できるのは実際には適切ではないようです-したがって、接続を継承することはノーゴー。

すべてのモジュールが使用するデータベースへのグローバル接続を 1 つ作成し、これを各モジュールに配置する必要があります。

#users.py
from db_stuff import connection

または、モジュールごとに新しい接続を作成し、それを維持する必要がありますか?

または、トランザクションごとに新しい接続を作成する必要がありますか?

これらのデータベース接続はどのように使用されることになっていますか? 同じことがカーソル オブジェクトにも当てはまります。トランザクションごとに新しいカーソルを作成しますか? データベース接続ごとに 1 つだけ作成しますか?

4

2 に答える 2

5

いいえ、接続を複数のモジュールに広げないでください。これは悪い設計です。単一のクラスで DB 接続を処理し、アプリケーション内の他のクラス/モジュールにサービスを提供します。

これは、DB に関連しない優れた設計原則と同じです。接続はグローバル リソースです。そのリソースを多くのモジュールで共有することは、多くの場所からグローバル変数にアクセスできるようにすることに似ています。これはデフォルトでは悪いことです(非常にやむを得ない理由がある場合を除きますが、そうではありません)。グローバル リソースをクラスにカプセル化して処理します。

于 2010-05-18T04:04:30.687 に答える
3

これがあなたが尋ねた実際の質問に実際には答えていないことはわかっていますが、本当の答えは、おそらく独自のデータベース パッケージを実装するべきではないということです。おそらく既存のもの (SQLALchemy など) を使用してから、そのライブラリの標準パターンを使用する必要があります。

本当に自分でやりたいのであれば、最善のアプローチは多くの要因に依存します。たとえば、プロジェクトは 1 つのデータベースへの接続のみを必要とするかどうかなどです。

それがかなり単純なアプリケーションであれば、グローバル接続オブジェクトをインポートするのがおそらく良い方法だと思います。舞台裏などでいつでも接続プールに交換できます。

于 2010-05-18T03:14:27.363 に答える