IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> alembic迁移不依赖配置文件 -> 正文阅读

[Python知识库]alembic迁移不依赖配置文件

工作目录: __init__.py

#!/usr/bin/env python
# -*- coding=utf8 -*-
import os
if __name__ != '__main__':
    import sys
    CUR_DIR = os.path.dirname(os.path.abspath(__file__))
    PROJECT_DIR = os.path.dirname(CUR_DIR)
    sys.path.insert(0, PROJECT_DIR)
    sys.path.insert(0, CUR_DIR)

from alembic.config import Config

from utils.orm import DB

# db仓库地址
REPO_PATH = os.path.join(PROJECT_DIR, "db_repository")
# 迁移工具配置文件地址 初始化仓库时的依赖 以后不使用此配置
CONFIG_FILE = "/tmp/alembic.ini"
# 迁移版本管理表
# MIGRATE_VERSION_TABLE = "migrate_version"


def get_alembic_config(file_: str = None):
    config = Config(file_=file_)
    config.set_main_option("sqlalchemy.url", DB.create_url(sync=False))
    config.set_main_option("script_location", REPO_PATH)
    config.set_main_option("prepend_sys_path", PROJECT_DIR)
    return config

初始化db仓库

#!/usr/bin/env python
# -*- coding=utf8 -*-

from alembic.command import init

from __init__ import REPO_PATH, CONFIG_FILE, get_alembic_config


def main():
    # 初始化db仓库
    config = get_alembic_config(CONFIG_FILE)
    init(config, REPO_PATH)


if __name__ == '__main__':
    main()

迁移管理

#!/usr/bin/env python
# -*- coding=utf8 -*-

from __init__ import get_alembic_config

from alembic.config import CommandLine


def main(argv=None, prog=None, **kwargs):
    """
    等价于alembic命令(不再依赖配置文件alembic.ini)
    """
    cmd_line = CommandLine(prog=prog)
    options = cmd_line.parser.parse_args(argv)
    if not hasattr(options, "cmd"):
        # see http://bugs.python.org/issue9253, argparse
        # behavior changed incompatibly in py3.3
        cmd_line.parser.error("too few arguments")
    else:
        config = get_alembic_config()
        cmd_line.run_cmd(config, options)


if __name__ == '__main__':
    main()

env.py

# from importlib import import_module

from alembic import context

from utils.orm import DB
from models import BaseModel

# include db models

# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
# config = context.config

# Interpret the config file for Python logging.
# This line sets up loggers basically.
# fileConfig(config.config_file_name)

# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
target_metadata = BaseModel.metadata

# other values from the config, defined by the needs of env.py,
# can be acquired:
# my_important_option = config.get_main_option("my_important_option")
# ... etc.


def run_migrations_offline():
    """Run migrations in 'offline' mode.

    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.

    Calls to context.execute() here emit the given string to the
    script output.

    """
    url = DB.create_url(sync=False)
    context.configure(
        url=url,
        target_metadata=target_metadata,
        literal_binds=True,
        dialect_opts={"paramstyle": "named"},
    )

    with context.begin_transaction():
        context.run_migrations()


def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    engine = DB.get_instance(sync=False)
    with engine.connect() as conn:
        context.configure(
            connection=conn,
            target_metadata=target_metadata
        )
        with context.begin_transaction():
            context.run_migrations()


if context.is_offline_mode():
    run_migrations_offline()
else:
    run_migrations_online()

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:12:29  更:2021-09-29 10:15:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:28:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码