alembic学习笔记和使用记录

alembic提供關於某個數據庫的創建,管理,調用變化管理脚本,使用sqlalchemy作爲底層的驅動。

使用alembic開始與創建Migration環境,Migration環境僅僅創建一次,之後通過應用的源碼來管理操作。環境的創建使用alembic的init命令。然後根據應用的特定需求來定製。這種特定環境的結構如下:

yourproject/

       alembic/

               env.py

               README

               script.py.mako

               versions/

                          3512b954651e_add_account.py

                          2b1ae634e5cd_add_order_id.py

                          3adcc9a56557_rename_username_field.py

有個基本的瞭解后,,我們可以創建一個使用init命令,

cd yourprojectpath

alembic init alembic

alembic list_templates 可列出所有環境模板。

特定模板的使用通過命令alembic init --template pylons ./scripts

編輯.ini文件,特定section,配置特定的功能,具體參考官文。

創建一個Migration脚本,有了環境,我們就可以創建revision,命令:

alembic revision -m "create account table"

一個新的文件就會產生,類似1975ea83b712_create_account_table.py内容如下:

""create account table

Revision ID: 1975ea83b712

Revises:

Create Date: 2011-11-08 11:40:27.089406"""

# revision identifiers, used by Alembic.

revision='1975ea83b712'

down_revision=None

branch_labels=None

from alembic import op

import sqlalchemy as sa

def  upgrade():

       pass

def  downgrade():

       pass

我們的工作就是改寫upgrade和downgrade函數的内容,來提供一個變化集合對於我們的數據庫。

注意一下down_revision這個變量,他的作用是操作migration時,知道特定的 順序,打個比方,現在我們的revision='1975ea83b712',儅我們創建下一個revison后,新產生的文件中變量down_revision的值為‘1975ea83b712‘,意指當前的revison.

儅我們使用命令alembic revision -m "Add a column",產生一個新的revision后,我們都可以使用命令alembic upgrade head升級到當前的revision.

命令alembic current可以獲取到當前revision的版本信息。

命令alembic history --verbose可以獲取到歷史版本的信息。-r + 範圍,可以查看特定範圍的版本信息:alembic history -r 1975ea:ae1027

命令alembic downgrade base,降級到最基礎的版本


自動生成Migration,首先,我們需要修改env.py文件,把target_metadata=None 改爲

from myapp.mymodel import Base

target_metadata = Base.metadata

之後在revision時,加入--autogenerate選項。例如:

alembic revision --autogenerate -m "Added account table"

這樣生成的revision文件,内容如下:

"""empty message

Revision ID: 27c6a30d7c24

Revises: None

Create Date: 2011-11-08 11:40:27.089406"""

# revision identifiers, used by Alembic.

revision='27c6a30d7c24'

down_revision=None

from alembic import op

import sqlalchemy as sa

def upgrade():

### commands auto generated by Alembic - please adjust! ###

op.create_table('account',

          sa.Column('id',sa.Integer()),

          sa.Column('name',sa.String(length=50),nullable=False),

          sa.Column('description',sa.VARCHAR(200)),

          sa.Column('last_transaction_date',sa.DateTime()),

          sa.PrimaryKeyConstraint('id')  

)

          ### end Alembic commands ###

def downgrade():

         ### commands auto generated by Alembic - please adjust! ###

         op.drop_table("account")

         ### end Alembic commands ###

上述命令会产生verison目录下一个脚本,该脚本的作用是用来对当前数据库状态进行新的更新升级,或者降级操作,一般情况下,我们在对数据库表的字段做出更改后,先执行alembic revision --autogenerate -m "备注"命令,然后再执行alembic upgrade head 命令,那么当前数据库表格的状态和字段为最新更改后的!

你可能感兴趣的:(alembic学习笔记和使用记录)