web-dev-qa-db-ja.com

SQLAlchemy:既存のテーブルに列を追加する方法

Sqlacemyを使用して既存のテーブルにフィールドまたは列を追加しようとしています。

以下はテーブルクラスです

class ReleaseVersion(Base):

    __tablename__ = 'versions'

    id = Column(Integer, primary_key=True, autoincrement=True)
    release = Column(String(128), nullable=False, unique=True)


    def __init__(self,release, id=None):

        if(id):
            self.id = id

        self.release = release
 _

次の行を使用してテーブルを初期化しました

myDB.ReleaseVersion.__table__.create(bind=self.engine, checkfirst=True)
 _

しばらくの間、DBを使用した後は、テーブルのすべての既存のコンテンツを保持しながら、ブールフィールド 'is_currentVersion'を追加する必要がありますが、これを行う方法は確かではありません。

テーブルにフィールドを手動で作成する必要があります。または、テーブルクラスにフィールドを追加し、初期化関数に存在しない場合は列を追加しますか?

3
Kay

あなたが探しているのは、aデータベースの移行と呼ばれます。何かを使用して flask-migratealembic モジュールを使用してMiguel Grinbergによって書かれた)を使用すると、データを失うことなく、列の追加または削除を変更できます。必要に応じて戻ることができるように、これらのデータベースの移行もバージョンです。

フラスコの移行は、どちらも同じ機能を持っているので、フラスコの移行があなたのFlaskおよびSQL-錬金術アプリケーションで正しくセットアップアレンビックに使用されているアレンビックモジュールを使用しています。

あなたのアプリが事前生産の場合:

ここに素晴らしいビデオがあります pretty printed フラスコへの移行のためのものです。フラスコ移行をORMとしてSQL-錬金術を使用しているFlaskアプリケーションのために意図されていることに留意されたいです。

あなたのアプリがポストプロダクションの場合:

(Miguel Grinbergの答えからの情報 "" ---( "あなたがそれで起動しなかった場合はelembic/flask-migrateを使って既存のデータベースを移行する方法 ?)

2つの選択肢があります。

1)進行中のデータベースの移行を追跡したい場合

ランflask DB INIT、移行リポジトリを作成します。お使いのデータベースモデルに新しい列を追加します。マイグレーションを生成するために、flask dBの移行を実行します。移行スクリプトは、それだけで新しい列を持つことになります。ファイル名を指定して実行flaskデータベースに新しい移行を適用するためにアップグレードするDB。この時点で、データベースは、新しい列を持っている必要があり、あなたは作業を続けることができます。上記の手順には、追加の変更を加える必要がある任意の時間を繰り返します。

この方法では、データベース全体を最初から再作成することはできません。データベースを1日目に持っていたスキーマに初期化する方法がある必要があります。その後、マイグレーション履歴を現在のスキーマにアップグレードすることができます。

2)アプリケーションにFlask-Myrateを追加している日にスキーマを含めて、移行履歴全体を追跡したい場合。

これは少しトリッキーですが、それはできます。

flask DB initで開始、移行リポジトリを作成します。次に、あなたのデータベースが空の考えにフラスコ-移行をだましする必要があります。あなたは、実際のDBの名前を変更し、それにはテーブルがありません同じ名前で新しいDBを作成することによってこれを行うことができます。その状態で、ランflask DB移動します。これは、データベースのスキーマ全体が含まれている移行を生成します。あなたがその最初の移行を持っていたら、正しい状態にデータベースを復元します。更新されたデータベースをマークするために実行flaskデシベルスタンプヘッド。お使いのデータベースモデルに新しい列を追加します。ランflask dBの移行再び、第二の移行を生成します。移行スクリプトは、それだけで新しい列を持つことになります。ファイル名を指定して実行flaskデータベースに新しい移行を適用するためにアップグレードするDB。

5
polymath

モデル内に列を追加してから、次のコマンドを実行できます。

flask db migrate -m "Your Message."
 _

その後実行します。

flask db upgrade
 _

データベースを確認します。また、参考にすることができます こちら

1
Rishabh Jhalani