fastapi 通过alembic数据迁移

本文介绍了如何在Python项目中配置数据库(如SQLite、PostgreSQL、MySQL),使用SQLAlchemyORM创建模型类,以及如何使用Alembic进行数据库迁移的过程,包括初始化、配置文件修改和迁移命令的执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、项目准备信息

项目结构

 1、首先在db.database.py 文件下配置数据库信息,代码如下
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# SQLALCHEMY_DATABASE_URL = "sqlite:///./db.db"
# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db"
SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:mysql@192.168.12.154:3306/kinit?charset=utf8mb4"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()
2、在db.base_class.py 文件中定义Base 类
from typing import Any

from sqlalchemy.ext.declarative import as_declarative, declared_attr


@as_declarative()
class Base:
    id: Any
    __name__: str

    # Generate __tablename__ automatically
    @declared_attr
    def __tablename__(cls) -> str:
        return cls.__name__.lower()
3、在db.models.py 文件中定义模型类
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship

from db.base_class import Base


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True, comment="id")
    email = Column(String(50), unique=True, index=True, comment="邮箱")
    hashed_password = Column(String(50), comment="密码")
    is_active = Column(Boolean, default=True, comment="状态")

    items = relationship("Item", back_populates="owner")


class Item(Base):
    __tablename__ = "items"

    id = Column(Integer, primary_key=True, index=True, comment="id")
    title = Column(String(50), index=True, comment="标题")
    description = Column(String(50), index=True, comment="描述")
    owner_id = Column(Integer, ForeignKey("users.id"), comment="user_id")

    owner = relationship("User", back_populates="items")
4、编写db.base.py文件,导入需要迁移的模型类和Base类即可
from .models import User, Item
from .base_class import Base

迁移

ALembic使用教程:

1、将定义的模型导入至db.__init__.py 文件中,不做其他修改即可
2、在自己的python项目环境中安装alembic。
pip install alembic
3、对alembic进行初始化。
对alembic进行初始化。

注:最后一个alembic为生成文件的名字

特别注意:进行初始化的时候与项目的app文件是同级。

初始化后会生成一个alembic的文件夹和一个alembic.ini的文件,如图:

 

4、修改alembic.ini文件

修改 sqlalchemy.url 项

sqlalchemy.url = mysql+pymysql://root:pwd@127.0.0.1/db_name
5、修改alembic>env.py文件。
from db.base import Base
target_metadata = Base.metadata
6、使用命令alembic revision --autogenerate -m "备注",生成当前的版本
alembic revision --autogenerate -m "init"
7、使用命令alembic upgrade head将alembic的版本更新到最新版,然后数据库中就有user表了
alembic upgrade head

ps: 具体教程请参考 alembic 官方文档

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值