[Flask-SQLAlchemy]sqlalchemy.exc.InvalidRequestError: Table ‘xxx’ is already defined for this MetaData instance. というエラーが出た時

はじめに

SQLAlchemyとFlask-SQLAlchemyで開発していて、ページ表示時に以下のようなエラーが出たので、解決策をメモしておきます。

エラー内容

sqlalchemy.exc.InvalidRequestError: Table 'xxx' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.

xxxというテーブルがメタデータインスタンスにすでに定義されているよ、というエラーのようです。
すでに存在しているテーブルオブジェクトのオプションやカラムを再定義する場合は、extend_existing=Trueを設定せよと書いてあります。

対応

モデルを定義しているコードに以下の一文を追記しました。

class XXX(db.Model):
    __tablename__ = 'xxx'
    __table_args__ = {'extend_existing': True} # 追記

これで動くようになりました。

参考