[解決済み] declarative_base()とdb.Modelの違いは何ですか?
質問
その
クイックスタート・チュートリアル
を継承したテーブルモデルを作るように指示します。
db.Model
クラスを継承したテーブルモデルを作るように指示します。
app = Flask(__main__)
db = SQLAlchemy(app)
class Users(db.Model):
__tablename__ = 'users'
...
ただし
SQLAlchemyチュートリアル
とボトル-SQLAlchemyの
README
は、テーブルモデルが
Base
からインスタンス化された
declarative_base()
.
Base = declarative_base()
class Users(Base):
__tablename__ = 'users'
...
この2つのアプローチの違いは何でしょうか?
どのように解決するのですか?
Flask-SQLAlchemy のソースコードを見てみると
db.Model
クラスは以下のように初期化されています。
self.Model = self.make_declarative_base()
そして、ここでは
make_declarative_base()
メソッドです。
def make_declarative_base(self):
"""Creates the declarative base."""
base = declarative_base(cls=Model, name='Model',
metaclass=_BoundDeclarativeMeta)
base.query = _QueryProperty(self)
return base
は
_BoundDeclarativeMeta
メタクラスは、SQLAlchemy の
DeclarativeMeta
のデフォルト値を計算するためのサポートを追加するだけです。
__tablename__
(テーブル名)のデフォルト値の計算と、バインドを処理するためのサポートを追加するだけです。
は
base.query
プロパティは Flask-SQLAlchemy ベースのモデルがクエリオブジェクトにアクセスする際に
Model.query
としてアクセスできるようになります。
session.query(Model)
.
は
_QueryProperty
クエリクラスも、SQLAlchemy のクエリをサブクラス化したものです。Flask-SQLAlchemy のサブクラスは、SQLAlchemy には存在しない、3つのクエリメソッドを追加しています。
get_or_404()
,
first_or_404()
と
paginate()
.
違いはこれだけだと思います。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenvなどの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する