MIG([M] ediaGoblin [I] S [G] REAT!)最早寫的克里斯托弗·艾倫·韋伯的GNU MediaGoblin。
從那時起,Joar Wandborg從MediaGoblin並到一個單獨的包,它的README您正在閱讀中提取的功能要領。
初始化遷移
無論是運行mig.run(發動機,名稱,型號,遷移)或手動添加mig.models.MigrationData表。
注意
如果已經填充您的數據庫,並有在MigrationData表中沒有遷移的版本行,mig.run()將失敗。
如果你已經有了一個填充數據庫,你需要創建一個MigrationData(名稱='migrations_handle',版本= 0)排在MigrationData表的遷移,否則MIG將嘗試啟動數據庫。
示例設置
創建遷移
..代碼塊::蟒蛇
   從MIG進口RegisterMigration
   從SQLAlchemy的導入元數據,表,列,整型,Unicode的,日期時間,
            ForeignKey的
    MIGRATIONS = {}
    @RegisterMigration(1,MIGRATIONS)
   高清create_site_table(db_conn):
       元=元數據(綁定= db_conn.bind)
        USER_TABLE =表('用戶',元數據,自動加載=真,
                autoload_with = db_conn.bind)
        site_table =表('網站',元數據,
               列('身份證',整數,primary_key =真)
               列('域',Unicode的),
               列(“owner_id',整型,ForeignKey的(user_table.columns ['身份證'])))
        site_table.create()
        db_conn.commit()
    @RegisterMigration(2 MIGRATIONS)
   高清item_add_site_id(db_conn):
       元=元數據(綁定= db_conn.bind)
        item_table =表('項目',元數據,自動加載=真)
        site_table =表('網站',元數據,自動加載=真)
        site_id_col = COLUMN('SITE_ID“,整型,ForeignKey的(
            site_table.columns ['身份證']))
        site_id_col.create(item_table)
        db_conn.commit()
註冊車型
..代碼塊::蟒蛇
   進口bcrypt
   從日期時間日期時間進口
   從進口遷移變更
   從talkatv進口分貝
   類用戶(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; backref = db.backref('的OpenID',為lazy =“動態”))
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;高清__init __(個體經營,用戶,網址):
&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 =網址
&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.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; backref = db.backref('項目',為lazy =“動態”))
&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 =網址
&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.owner.username如果self.site否則無)
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;高清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; backref = db.backref('地盤',為lazy =“動態”))
&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; backref = db.backref('意見',為lazy =“動態”))
&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; backref = db.backref('意見',為lazy =“動態”))
&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;高清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;模型= [
&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進口分貝
&NBSP;&NBSP;&NBSP;從yourapp.models進口車型
&NBSP;&NBSP;&NBSP;從yourapp.migrations進口MIGRATIONS
&NBSP;&NBSP;&NBSP;高清check_or_create_mig_data():
&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;如果不是db.engine.dialect.has_table(db.session'mig__data'):
&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不初始化。
&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中
評論沒有發現