MIG([M] ediaGoblin [i]はS [G] reat!)最初のGNU MediaGoblinためのクリストファー·アラン·ウェバーによって書かれました。
それ以来、Joar WandborgがMediaGoblinから、あなたが現在読んでいるREADMEだ別のパッケージへの機能の本質を抽出した。
の初期の移行の
mig.run(エンジン、名前、モデル、移行を)実行するか、または手動でmig.models.MigrationDataテーブルを追加してください。
注
あなたのデータベースがすでに人口で、マイグレーションのバージョン行がMigrationDataテーブルに存在しない場合、mig.run()は失敗します。
すでに実装済みのデータベースを持っている場合は、そうでなければ、MIGは、データベースを開始しようと、MigrationData(名= 'migrations_handle」、バージョン= 0)MigrationDataテーブル内のあなたの移行のための行を作成する必要があります。
の例のセットアップの
移行を作成
..コードブロック::パイソン
    MIG輸入RegisterMigrationから
    SQLAlchemyのインポートメタデータから、テーブル、列、整数、ユニコード、日時、
            ForeignKeyの
    MIGRATIONS = {}
    @RegisterMigration(1、MIGRATIONS)
   デフcreate_site_table(db_conn):
       メタデータ=メタデータ(バインド= db_conn.bind)
        user_table =表( 'ユーザー'、メタデータ、オートロード= TRUE、
                autoload_with = db_conn.bind)
        site_table =表(「サイト」、メタデータ、
               コラム(「ID」、整数、PRIMARY_KEY = TRUE)、
               コラム(「ドメイン」、ユニコード)、
               列( 'OWNER_ID」、整数、ForeignKeyの(user_table.columns [' ID '])))
        site_table.create()
        db_conn.commit()
    @RegisterMigration(2、MIGRATIONS)
    DEF(db_conn)item_add_site_id:
       メタデータ=メタデータ(バインド= db_conn.bind)
        item_table =表( 'アイテム'、メタデータ、自動ロード=真)
        site_table =表(「サイト」、メタデータ、自動ロード=真)
        site_id_col =列( 'SITE_ID」、整数、ForeignKeyの(
            site_table.columns ['ID']))
        site_id_col.create(item_table)
        db_conn.commit()
モデルを登録します
..コードブロック::パイソン
   輸入bcryptの
   日時輸入日時から
   移行輸入チェンジから
    talkatvインポートDBから
   クラスのユーザー(db.Model):
        ID = db.Column(db.Integer、PRIMARY_KEY =真)
       ユーザ名= db.Column(db.String(60)、ユニーク=真)
       電子メール= db.Column(db.String(255)、ユニーク=真)
       パスワード= db.Column(db.String(60))
       デフ__init __(自己、ユーザー名、電子メール、パスワード=なし、OpenIDの=なし):
            self.username =ユーザ名
            self.email =メール
           パスワードの場合:
                self.set_password(パスワード)
            OpenIDの場合:
                self.openid = OpenIDで
       デフ__repr __(自己):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;リターン '<ユーザー{0}>'。形式(self.username)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフset_password(自己、パスワード):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.password = bcrypt.hashpw(パスワード、bcrypt.gensalt())
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフcheck_password(自己、パスワード):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;リターンbcrypt.hashpw(パスワード、self.password)== self.password
&NBSP;&NBSP;&NBSP;クラスのOpenID(db.Model):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; ID = db.Column(db.Integer、PRIMARY_KEY =真)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; URL = db.Column(db.String())
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;作成された= db.Column(db.DateTime)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; USER_ID = db.Column(db.Integer、db.ForeignKey( 'user.id'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;ユーザー= db.relationship( 'ユーザー'、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;後方参照= db.backref( 'のOpenID」、怠惰='ダイナミック '))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__init __(自己、ユーザー、URL):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.created = datetime.utcnow()
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.user =ユーザー
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.url = URL
&NBSP;&NBSP;&NBSP;クラスItem(db.Model):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; ID = db.Column(db.Integer、PRIMARY_KEY =真)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;タイトル= db.Column(db.String())
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; URL = db.Column(db.String()、ユニーク=真)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;作成された= db.Column(db.DateTime)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; SITE_ID = db.Column(db.Integer、db.ForeignKey( 'site.id'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;サイト= db.relationship(「サイト」、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;後方参照= db.backref( 'アイテム'、怠惰= 'ダイナミック'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__init __(自己、URL、タイトル、サイト=なし):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;サイトの場合:
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.site =サイト
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.title =タイトル
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.url = URL
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.created = datetime.utcnow()
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__repr __(自己):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;リターン '<項目{0}({1})>'。フォーマット(
self.url、
self.site他なしの場合self.site.owner.username)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DEF as_dict(自己):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;私= {
「ID」:self.id、
「タイトル」:self.title、
「URL」:self.url、
「作成」:self.created.isoformat()}
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.site場合:
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; me.update({'オーナー':self.site.owner.id})
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;私を返す
&NBSP;&NBSP;&NBSP;クラスのサイト(db.Model):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; ID = db.Column(db.Integer、PRIMARY_KEY =真)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;作成された= db.Column(db.DateTime)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;ドメイン= db.Column(db.String)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; OWNER_ID = db.Column(db.Integer、db.ForeignKey( 'user.id'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;所有者= db.relationship( 'ユーザー'、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;後方参照= db.backref( 'サイト'、怠惰= 'ダイナミック'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__init __(自己、所有者、ドメイン):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.owner =所有者
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.domain =ドメイン
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.created = datetime.utcnow()
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__repr __(自己):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;リターン '<サイト{0}({1})>'。フォーマット(
self.domain、
self.owner.username)
&NBSP;&NBSP;&NBSP;クラスのコメント(db.Model):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; ID = db.Column(db.Integer、PRIMARY_KEY =真)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;作成された= db.Column(db.DateTime)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;テキスト= db.Column(db.String())
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; ITEM_ID = db.Column(db.Integer、db.ForeignKey() 'item.id')
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;アイテム= db.relationship( 'アイテム'、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;後方参照= db.backref( 'コメント'、怠惰= 'ダイナミック'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; USER_ID = db.Column(db.Integer、db.ForeignKey( 'user.id'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;ユーザー= db.relationship( 'ユーザー'、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;後方参照= db.backref( 'コメント'、怠惰= 'ダイナミック'))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__init __(自己、アイテム、ユーザー、テキスト):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.item =アイテム
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.user =ユーザー
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.text =テキスト
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; self.created = datetime.utcnow()
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;デフ__repr __(自己):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;リターン '<コメント{0}({1})>'。フォーマット(
self.textの[:25] +( '...'場合、LEN(self.text他)> 25 '')、
self.user.username)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; DEF as_dict(自己):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;私= {
「ID」:self.id、
「アイテム」:self.item.id、
「user_idは ':self.user.id、
「ユーザー名」:self.user.username、
「テキスト」:self.text、
「作成」:self.created.isoformat()}
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;私を返す
&NBSP;&NBSP;&NBSP; MODELS = [
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;ユーザー、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;コメント、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;アイテム、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; OpenIDの、
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;サイト]
実行の移行
..コードブロック::パイソン
&NBSP;&NBSP;&NBSP; MIGインポート実行から
&NBSP;&NBSP;&NBSP; mig.modelsからMigrationDataをインポート
&NBSP;&NBSP;&NBSP; yourapp輸入DBから
&NBSP;&NBSP;&NBSP; yourapp.models輸入モデルから
&NBSP;&NBSP;&NBSP; yourapp.migrations輸入MIGRATIONSから
&NBSP;&NBSP;&NBSP; DEF check_or_create_mig_data():
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; (db.session、「mig__data ')db.engine.dialect.has_tableでない場合:
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; #移行テーブルを作成します。
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; MigrationData .__テーブル__。(db.engine)を作成
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; MIGはinitのないように、#は、最初の移行を作成します。
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;移行= MigrationData(名= U '__ MAIN__'、バージョン= 0)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; db.session.add(マイグレーション)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; db.session.commit()
&NBSP;&NBSP;&NBSP; __name__ == '__main__'の場合:
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; db.engine.dialect.has_table場合(db.session、「ユーザー '):
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; #DBはすでに、マイグレーションがアクティブであるかどうかを確認し、入力されます
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; #そうでなければ、移行データテーブルを作成する
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP; check_or_create_mig_data()
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;実行(db.engine、U '__ MAIN__'、モデル、MIGRATIONS)
の要件の
- のPythonます。
コメントが見つかりません