1688做網(wǎng)站多少錢seox
SQLAlchemy遷移數(shù)據(jù)庫(kù)
目錄
- SQLAlchemy遷移數(shù)據(jù)庫(kù)
- 安裝Alembic
- 配置Alembic
- 編輯 alembic.ini
- 編輯env.py
- 生成遷移文件
- 建表語(yǔ)句示例
- 修改遷移文件命名格式
安裝Alembic
pip install alembic
配置Alembic
執(zhí)行初始化后會(huì)創(chuàng)建一個(gè) alembic
目錄,包含Alembic的配置文件 alembic.ini
和 env.py
alembic init alembic
編輯 alembic.ini
# alembic.ini
sqlalchemy.url = mysql+pymysql://root:666@localhost/fastapidemo
- 驅(qū)動(dòng):
mysql+pymysql
- 用戶名:
root
- 密碼:
666
- 主機(jī):
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# 導(dǎo)入你的 Base 和模型
from module import Base, Book, Author, Pressconfig = context.config# 默認(rèn)None 替換成你的Base
target_metadata = Base.metadata
# 其他配置...
生成遷移文件
- 生成遷移文件
alembic revision --autogenerate
- 更新到數(shù)據(jù)庫(kù)
alembic upgrade head
建表語(yǔ)句示例
# module.py
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Table
from sqlalchemy.orm import DeclarativeBase, relationshipclass Base(DeclarativeBase):__abstract__ = True # 標(biāo)記為抽象基類,防止直接創(chuàng)建表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
配置項(xiàng)
# alembic.ini
file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d
%(rev)s
: 修訂版本號(hào)%(slug)s
: 修訂描述%(year)d
: 當(dāng)前年份%(month).2d
: 當(dāng)前月份(兩位數(shù))%(day).2d
: 當(dāng)前日期(兩位數(shù))%(hour).2d
: 當(dāng)前小時(shí)(兩位數(shù))%(minute).2d
: 當(dāng)前分鐘(兩位數(shù))%(second).2d
: 當(dāng)前秒(兩位數(shù))