2020年7月16日木曜日

Flask-SQLAlchemy で複数のカラムでユニークキーを設定する方法

概要

例えば name と age でユニークキーを貼る場合は以下の通りです

環境

  • macOS 10.15.5
  • MySQL 8.0.19
  • Python 3.8.3
  • Flask-SQLAlchemy 2.4.3

サンプルコード

__table_args__ を使って db.UniqueConstraint に複数のカラムを指定すれば OK です
ユニークキーに名前をつけるので好きな名前をつけましょう

from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow

db = SQLAlchemy()
ma = Marshmallow()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    age = db.Column(db.Integer)
    __table_args__ = (
        db.UniqueConstraint('name', 'age', name='unique_name_age'),
    )

    def __repr__(self):
        return "%s,%s,%i" % (self.id, self.name, self.age)

class UserSchema(ma.Schema):
    class Meta:
        fields = ("id", "name", "age")

当然ですがユニークキーを設定場合にすでに重複している場合は設定できないのでご注意を

参考サイト

0 件のコメント:

コメントを投稿