您的位置:首页 > 房产 > 建筑 > SQLAlchemy迁移数据库

SQLAlchemy迁移数据库

2024/10/6 20:29:00 来源:https://blog.csdn.net/AZURE060606/article/details/140251188  浏览:    关键词: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: 当前秒(两位数)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com