8

私は仕事でSQLAlchemyを使用していますが、本当にうまく機能します。今、私はベストプラクティスについて考えています。

今のところ、すべての SQLA を保持するモジュールを作成します。

my_model
        |__  __init__.py 
        |__  _config.py <<<<< contains LOGIN, HOST, and a MetaData instance
        |__  table1.py <<<<< contains the class, the model and the mapper for table1
        |__  table2.py <<<<< contains the class, the model and the mapper for table2
        [...]

今、それが最善の方法であるかどうかは本当にわかりません。クラスを細かい粒度でロードし、データベースなどとの接続を1つだけ作成したいと思います。

ここでは、すべてのクラスが分離されていますが、すべて _config をインポートし、それが良いことなのかどうか疑問に思っています。

さらに、毎回マッパーを台無しにすることなく、独立して格納できるモデル クラスのサブクラスを作成できるようにしたいと考えています。どうやってやるの ?

今のところ、それらを同じファイルに入れただけで、別のマッパーを作成する必要がありますが、最初のマッパーは引き続き毎回呼び出されます。マッパーはインポート時にトリガーされるため、親クラスをインポートする必要がある場合も同じです。クラスを使用してデータにアクセスしないと、毎回マップするのが過熱しませんか?

私もElixirの使用は避けたいです。

4

1 に答える 1

3

個人的には、データベース/ORMロジックをモデルクラスから除外するのが好きです。テストが簡単になります。私は通常types.py、アプリケーションで使用されるタイプを定義するaのようなものを持っていますが、データベースからは独立しています。

次に、通常、データベースのセットアップに必要なクラスと残りのコード(すべてのマッパーなどを含む)を含む、db.pyまたは類似のものがあります。Session

データベース操作を実行するモジュールを除く他のモジュールはdbモジュールをインポートする必要がなく、データベースの存在はほとんどのアプリケーションクラスから完全に隠されています。

私の知る限り、マッパーを変更せずにサブクラスを簡単に作成することはできません。SQLAlchemyは、クエリを実行するときにデータベースから取得するサブクラスを知る方法がなく、とにかくデータを保存するときにサブクラスを示すことができる必要があります。

メインモジュールから一度にすべてのマッパーを呼び出すことで問題が発生することは実際には見られないdbので、実際にボトルネックとして特定しない限り、常に初期化することは実際には問題ではないと思います。私の経験では、他の処理は、マイナーなマッパーのオーバーヘッドよりもはるかに大きな要因です。

于 2008-12-31T16:21:32.297 に答える