zoukankan      html  css  js  c++  java
  • Alembic管理Sqlite3数据库版本

    1. 初始化

    1. 在'.db'同级目录下键入alembic init alembic,生成alembic文件夹。

    2. 修改alembic文件夹下env.py,添加以下内容:

      import os
      import sys
      
      basedir = os.path.split(os.getcwd())[0]
      sys.path.append(basedir)
      from client.app.database import Base
      from client.app.models import BackUpAlive, ZipFile, AiModel
      
      # target_metadata = mymodel.Base.metadata
      # target_metadata = None
      target_metadata = Base.metadata
      

      其中from client.app.database import Basefrom client.app.models import BackUpAlive, ZipFile, AiModel需修改成自己模块内容。

    3. 修改和alembic文件夹同级的alembic.ini:

      sqlalchemy.url = sqlite:///dbname.db
      

      其中dbname.db改成自己的数据库文件绝对路径。

    2. 迁移升级

    1. 自动生成迁移文件:

      alembic revision --autogenerate -m "upgrade commit content"

    2. 更新数据库:

      • 增加列nullable = True的情况:

        alembic upgrade head

      • 增加列nullable = False的情况:

        需先修改alembic/versions中对应py文件的upgrade(),例:

        def upgrade():
            # ### commands auto generated by Alembic - please adjust! ###
            op.add_column('users', sa.Column('is_admin', sa.Boolean(), nullable=False))
            # ### end Alembic commands ###
        

        修改后:

        def upgrade():
            # ### commands auto generated by Alembic - please adjust! ###
            op.add_column('users', sa.Column('is_admin', sa.Boolean(), nullable=True))
            op.execute("UPDATE users SET is_admin = false")
            op.alter_column('users', 'is_admin', nullable=False)
            # ### end Alembic commands ###
        

        之后执行:

        alembic upgrade head

    3. 回退版本

    1. 无删除的字段的情况:

      alembic downgrade -1

    2. 有删除字段的情况,由于sqlite3无drop关键字需先修改alembic/versions中对应py文件的downgrade(),例:

      def downgrade():
          # ### commands auto generated by Alembic - please adjust! ###
          op.drop_column('AiModel', 'test')
          # ### end Alembic commands ###
      

      修改成:

      def downgrade():
          # ### commands auto generated by Alembic - please adjust! ###
          with op.batch_alter_table('AiModel') as batch_op:
              batch_op.drop_column('test')
          # ### end Alembic commands ###
      

      之后执行:

      alembic downgrade -1

  • 相关阅读:
    屏蔽2003:在系统启动时至少有一个服务或驱动程序产生错误
    C#中有关string和byte[]转换的问题
    如何控制winform程序只能打开一个呢?
    ArrayList的使用方法【转载】
    ASP.NET中ajaX学习记录
    C#去除字符串空格的几种方法【转载】
    C# 中2,10,16进制及其ASCII码之间转化
    vc++下char数组赋值乱码问题
    c#关机时自动退出程序
    Android入门前言(一)之Android应用开发入门五问 (转自:http://blog.csdn.net/android_tutor/)
  • 原文地址:https://www.cnblogs.com/coodyz/p/14174358.html
Copyright © 2011-2022 走看看