Alembic SQLAlchemy 进行数据迁移
创始人
2025-06-01 01:49:44
0

Alembic SQLAlchemy 进行数据迁移

  • 一.模块安装
  • 二、声明基类模型
    • 2-1.创建model.py文件
    • 2-2.创建基类模型(添加在model.py)
    • 2-3.完整model.py
  • 三、alembic初始化
    • 3-1.执行初始化命令
    • 3-2.修改alembic配置文件(alembic.ini)
    • 3-3.配置文件内容
    • 3-4.修改alembic.env.py文件内容
  • 四、数据迁移

一.模块安装

创建Python虚拟环境:https://blog.csdn.net/chenliang1038/article/details/129295440

(py379_env) PS D:\PersonalProject\TG-Test> pip install psycopg2
(py379_env) PS D:\PersonalProject\TG-Test> pip install SQLAlchemy
(py379_env) PS D:\PersonalProject\TG-Test> pip install alembic

在这里插入图片描述

二、声明基类模型

2-1.创建model.py文件

(py379_env) PS D:\PersonalProject\TG-Test> type nul > model.py

2-2.创建基类模型(添加在model.py)

from sqlalchemy.ext.declarative import declarative_base
ModelBase = declarative_base()

2-3.完整model.py

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, ForeignKey, Column
from sqlalchemy.types import Unicode, Integer, DateTime, String
from sqlalchemy.orm import relationship
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from flask_migrate import Migrate
ModelBase = declarative_base()  # 使用declarative_base()创建基类模型,其他映射类,都是继承自它
engine = create_engine('postgresql+psycopg2://postgres:qaz123@127.0.0.1:5432/test')
Session = sessionmaker(bind=engine)   # 绑定引擎 创建会话
session = Session()  # 实例会话对象
class UserInfo(ModelBase):    # 只要声明<类>的继承<映射基类>,表示为映射类__tablename__ = 'auth_user'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(25), name="username")password = Column(String(25), name="password")

三、alembic初始化

3-1.执行初始化命令

(py379_env) PS D:\PersonalProject\TG-Test> alembic init alembic

在这里插入图片描述

3-2.修改alembic配置文件(alembic.ini)

# sqlalchemy.url替换为你的数据库链接,相当于引擎
sqlalchemy.url = postgresql://postgres:qaz123@127.0.0.1:5432/test

3-3.配置文件内容

[alembic]
script_location = alembic
prepend_sys_path = .
version_path_separator = os  # Use os.pathsep. Default configuration used for new projects.
sqlalchemy.url = postgresql://postgres:qaz123@127.0.0.1:5432/test
[post_write_hooks]
[loggers]
keys = root,sqlalchemy,alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
qualname =
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S

3-4.修改alembic.env.py文件内容

# target_metadata = None 找到这,并替换余下内容
import sys
from os.path import abspath, dirname
from model import ModelBase   # 这里是model.py模板 ModelBase基类模型
# 告诉alembic 你的表数据在哪
sys.path.append(dirname(dirname(abspath(__file__))))
target_metadata = ModelBase.metadata

四、数据迁移

alembic revision --autogenerate -m "test"  # 自定义迁移文件名
# 在versions文件夹在,生成<..._test.py>的文件
alembic upgrade head

数据库
在这里插入图片描述

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...