[解決済み】sqlalchemy 複数のカラムにまたがる一意性
2022-04-07 16:52:36
質問
例えば、場所を表すクラスがあるとします。ロケーションは顧客に属しています。ロケーションは、ユニコードの10文字コードで識別されます。ロケーションコード("location code")は、特定の顧客のためのロケーションの中でユニークでなければならない。
The two below fields in combination should be unique
customer_id = Column(Integer,ForeignKey('customers.customer_id')
location_code = Column(Unicode(10))
つまり、2人の顧客、顧客 "123" と顧客 "456" がいる場合です。両者とも "main"というロケーションを持つことはできますが、mainというロケーションを2つ持つことはできないのです。
ビジネスロジックで処理することは可能ですが、sqlalchemyで簡単に要件を追加する方法がないかを確認したいのです。unique=True オプションは特定のフィールドに適用されたときのみ機能するようで、テーブル全体がすべてのロケーションに対してユニークなコードのみを持つことになります。
解決方法は?
を抽出します。
ドキュメント
の
Column
:
ユニーク - True の場合、このカラムが一意であることを示します。 制約がある場合、または インデックス もTrueの場合、インデックス はユニークフラグ付きで作成する必要があります。複数のカラムを指定するには 制約/インデックスを指定したり、明示的な名前を指定するには ユニーク制約 または インデックス を明示的に構築します。
これらはテーブルに属し、マップされたクラスには属さないので、テーブルの定義の中でそれらを宣言します。
__table_args__
:
# version1: table definition
mytable = Table('mytable', meta,
# ...
Column('customer_id', Integer, ForeignKey('customers.customer_id')),
Column('location_code', Unicode(10)),
UniqueConstraint('customer_id', 'location_code', name='uix_1')
)
# or the index, which will ensure uniqueness as well
Index('myindex', mytable.c.customer_id, mytable.c.location_code, unique=True)
# version2: declarative
class Location(Base):
__tablename__ = 'locations'
id = Column(Integer, primary_key = True)
customer_id = Column(Integer, ForeignKey('customers.customer_id'), nullable=False)
location_code = Column(Unicode(10), nullable=False)
__table_args__ = (UniqueConstraint('customer_id', 'location_code', name='_customer_location_uc'),
)
関連
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] 複数の例外を1行でキャッチする(ブロックを除く)
-
[解決済み] Pandasのデータフレームで複数の列を選択する
-
[解決済み] リストの変更が不意にサブリスト全体に反映されたリスト
-
[解決済み] SQLAlchemy ORDER BY DESCENDING?
-
[解決済み] SQLAlchemy: flush() と commit() の違いは何ですか?
-
[解決済み】SQLAlchemyのfilterとfilter_byの違いについて
-
[解決済み】SQLAlchemyのIN句
最新
-
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関数の高度な応用を解説
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] SQLAlchemy で `UNIQUE` 制約をモデル化するには?