[解決済み] SQLAlchemy で `UNIQUE` 制約をモデル化するには?
質問
Flask/SQLAlchemyのアプリケーションを書いていて、ユーザーとグループを持っています。
ユーザーは複数のグループに所属することができ 各グループ内で一意の番号を持つ . データベースのモデル化方法についてお伺いします 多対多の関係には、次のようなテーブル構造を使用するようアドバイスを受けました。
TABLE UserGroups
GroupID
UserID
UserNumber
PRIMARY KEY (GroupID, UserID)
UNIQUE (GroupID, UserNumber)
FOREIGN KEY (GroupID)
REFERENCES Groups (GroupID)
FOREIGN KEY (UserID)
REFERENCES Users (UserID)
SQLAlchemy で通常の多対多のリレーションシップを作る方法はわかりましたが
UNIQUE
制約に、さらに
UserNumber
フィールドを使用します。
データベース設計やORM、SQLAlchemyの経験があまりないので、当たり前のことかもしれませんが、表現方法が見つかりません。
私が理解できないことのひとつは、通常の多対多のリレーションシップを使用して、私の
User
クラスには
リストのような
属性
groups
には、彼が所属するすべてのグループが含まれていますが、これは完全に
UserGroups
にアクセスする方法がわかりません。
UserNumber
フィールドがあります。
これだけでは、ちょっとモヤモヤしますよね。SQLAlchemyでこのようなことをする良い例や説明はありますか?
どのように解決するのですか?
質問の最初の部分(複数の列を持つユニークな制約の作成について)は、すでに clegさんが回答しています。 .
しかし、マッピングテーブルに追加のカラムを持ちたい場合、デフォルトの多対多のアプローチはうまくいきません。その代わりに アソシエーションオブジェクトパターン . さらに、ユーザーとグループ間のアクセスを簡素化するために アソシエーションプロクシ .
は
proxied_association.py
から
SQLAlchemyの例
を参考にするとよいでしょう。
関連
-
Python Decorator 練習問題
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み】sqlalchemy 複数のカラムにまたがる一意性