当前位置: 首页 > news >正文

SQLAlchemy迁移数据库

SQLAlchemy迁移数据库

目录

  • SQLAlchemy迁移数据库
    • 安装Alembic
    • 配置Alembic
    • 编辑 alembic.ini
    • 编辑env.py
    • 生成迁移文件
    • 建表语句示例
    • 修改迁移文件命名格式

安装Alembic

pip install alembic

配置Alembic

执行初始化后会创建一个 alembic 目录,包含Alembic的配置文件 alembic.inienv.py

alembic init alembic

编辑 alembic.ini

# alembic.ini
sqlalchemy.url = mysql+pymysql://root:666@localhost/fastapidemo
  • 驱动:mysql+pymysql
  • 用户名:root
  • 密码:666
  • 主机:localhost
  • 表名:fastapidemo

编辑env.py

# env.py
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context# 导入你的 Base 和模型
from module import Base, Book, Author, Pressconfig = context.config# 默认None 替换成你的Base
target_metadata = Base.metadata
# 其他配置...

生成迁移文件

  • 生成迁移文件
alembic revision --autogenerate
  • 更新到数据库
alembic upgrade head

建表语句示例

# module.py
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Table
from sqlalchemy.orm import DeclarativeBase, relationshipclass Base(DeclarativeBase):__abstract__ = True  # 标记为抽象基类,防止直接创建表book_press = Table('book_press', Base.metadata, Column('book_id', Integer, primary_key=True),Column('press_id', Integer, primary_key=True))class Book(Base):__tablename__ = 'book'id = Column(Integer, primary_key=True, autoincrement=True)title = Column(String(15), nullable=False, unique=True)author_id = Column(Integer, ForeignKey('author.id'))author = relationship('Author', backref='books', cascade='all,delete')press = relationship('Press', backref='books', secondary=book_press)class Author(Base):__tablename__ = 'author'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(15), nullable=False, unique=True)class Press(Base):__tablename__ = 'press'id = Column(Integer, primary_key=True, autoincrement=True)name = Column(String(15), nullable=False, unique=True)

修改迁移文件命名格式

找到或添加alembic.ini中的 file_template 配置项

# alembic.ini
file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d
  • %(rev)s: 修订版本号
  • %(slug)s: 修订描述
  • %(year)d: 当前年份
  • %(month).2d: 当前月份(两位数)
  • %(day).2d: 当前日期(两位数)
  • %(hour).2d: 当前小时(两位数)
  • %(minute).2d: 当前分钟(两位数)
  • %(second).2d: 当前秒(两位数)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 路由器是什么?
  • [数据结构] 归并排序快速排序 及非递归实现
  • 机器学习简介--NLP(二)
  • 【qt】TCP 服务端怎么收到信息?
  • pyrender 离线渲染包安装教程
  • 如何在Java中实现自动化测试和集成测试
  • Jmeter实现接口自动化
  • Vue 2 与 ECharts:结合使用实现动态数据可视化
  • 英语学习交流小程序的设计
  • Kubernetes集群性能测试之kubemark集群搭建
  • 爬虫爬数据犯法吗
  • Portainer与Rancher的比较分析
  • 【IMU】 确定性误差与IMU_TK标定原理
  • 洛谷 P1491 集合位置
  • Vue3中的Composables组合式函数,Vue3实现minxins
  • hexo+github搭建个人博客
  • 收藏网友的 源程序下载网
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Java深入 - 深入理解Java集合
  • PAT A1092
  • python_bomb----数据类型总结
  • quasar-framework cnodejs社区
  • redis学习笔记(三):列表、集合、有序集合
  • SAP云平台里Global Account和Sub Account的关系
  • storm drpc实例
  • 第十八天-企业应用架构模式-基本模式
  • 批量截取pdf文件
  • 驱动程序原理
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #git 撤消对文件的更改
  • $L^p$ 调和函数恒为零
  • (16)Reactor的测试——响应式Spring的道法术器
  • (C语言)共用体union的用法举例
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (ZT)出版业改革:该死的死,该生的生
  • (ZT)薛涌:谈贫说富
  • (待修改)PyG安装步骤
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (七)Java对象在Hibernate持久化层的状态
  • (十八)三元表达式和列表解析
  • .CSS-hover 的解释
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 中viewstate的原理和使用
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .Net6 Api Swagger配置
  • .net打印*三角形
  • :“Failed to access IIS metabase”解决方法
  • @font-face 用字体画图标
  • [20171101]rman to destination.txt
  • [Bada开发]初步入口函数介绍
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [CC-FNCS]Chef and Churu