当前位置: 首页 > 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: 当前秒(两位数)
http://www.lryc.cn/news/394883.html

相关文章:

  • Django文档简化版——Django快速入门——创建一个基本的投票应用程序
  • 安全防御第三天(笔记持续更新)
  • 【12321骚扰电话举报受理中心-短信验证安全分析报告】
  • 杂项——循迹模块调节方法
  • 揭秘:源代码防泄密的终极秘籍
  • avcodec_send_packet函数阻塞
  • 一个parquet-go例子
  • 扩散模型笔记
  • 上海-LM科技(面经)
  • 用 Echarts 画折线图
  • C++的map / multimap容器
  • 双向链表 -- 详细理解和实现
  • WebGIS面试题
  • 代码随想录算法训练营:21/60
  • 数据结构——二叉树之c语言实现堆与堆排序
  • #数据结构 链表
  • 单片机软件架构连载(4)-结构体
  • 工厂方法模式在金融业务中的应用及其框架实现
  • python库(6):Pygments库
  • 金斗云 HKMP智慧商业软件 任意用户创建漏洞复现
  • 前端JS特效第24集:jquery css3实现瀑布流照片墙特效
  • 区块链论文速读A会-ISSTA 2023(2/2)如何检测DeFi协议中的价格操纵漏洞
  • 权力之望怎么下载客户端 权力之望一键下载
  • Oracle PL/SQL 循环批量执行存储过程
  • kafka 生产者
  • Powershell 获取电脑保存的所有wifi密码
  • golang结合neo4j实现权限功能设计
  • java 参数传递(尤其注意参数是对象的情况)
  • 拼音字符串相似度
  • 如何创建一个基本的Mojolicious Web应用:探索Perl的现代Web框架