FastAPI数据库创建表工具Alembic使用方法

1 篇文章 0 订阅
1 篇文章 0 订阅

Alembic初始化

# 激活虚拟环境安装alembic
pip install alembic
alembic init alembic

会自动生成alembic目录
里面包含内容如下

alembic
│  env.py
│  README
│  script.py.mako
└─versions

SQLModel代码编写

文件路径:项目/module/users.py

from sqlmodel import SQLModel, Field
from typing import Optional


class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    username: str
    password: str


class Role(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str


class Permission(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str

修改 项目/module/__init__.py

# 导入所有model
from . import *

模板文件修改

为了管理sqlmodel的数据模型需要更改模板文件防止自动生成的迁移脚本无法运行
import sqlalchemy as sa 下方添加 import sqlmodel

"""${message}

Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa
import sqlmodel

${imports if imports else ""}

# revision identifiers, used by Alembic.
revision: str = ${repr(up_revision)}
down_revision: Union[str, None] = ${repr(down_revision)}
branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}


def upgrade() -> None:
    ${upgrades if upgrades else "pass"}


def downgrade() -> None:
    ${downgrades if downgrades else "pass"}

配置数据引擎读取自定义配置

由于我们写项目不可能一个组件一个配置,故都要使用统一的配置文件
我这里以config.ini文件做举例,config.ini文件在项目 根目录 请注意

[mysql]
mysql_host=192.168.1.3
mysql_user=root
mysql_pass=123456
mysql_port=3306
mysql_db=ppa
[redis]
redis_host=10.0.0.2
redis_port=6379
redis_db=0

然后alembic自动生成的env.py加入以下代码,注意看注释

import configparser  						# 导入的模块
from logging.config import fileConfig		# 导入的模块
from urllib.parse import quote_plus			# 导入的模块

from sqlalchemy import engine_from_config	# 原有配置不需要修改
from sqlalchemy import pool					# 原有配置不需要修改
from alembic import context					# 原有配置不需要修改

################################ 添加的内容 ################################
# 使用 configparser 读取另外一个.ini文件
config_parser = configparser.ConfigParser()
config_parser.read('config.ini')
host = config_parser.get('mysql', 'mysql_host')
user = config_parser.get('mysql', 'mysql_user')
password = quote_plus(config_parser.get('mysql', 'mysql_pass')).replace("%", "%%")
port = config_parser.get('mysql', 'mysql_port')
db = config_parser.get('mysql', 'mysql_db')
database_url = f"mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset=utf8mb4"
###########################################################################
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config									# 原有配置不需要修改

config.set_main_option('sqlalchemy.url', database_url)	# 新增内容
# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.config_file_name is not None:
    fileConfig(config.config_file_name)

# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata
from sqlmodel import SQLModel						# 导入模块
target_metadata = SQLModel.metadata 				# 指定元数据
# 以下内容不做修改
....

执行表生成

在项目根目录

alembic revision --autogenerate -m "自定义备注"
alembic upgrade head 
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Alembic是由SQLAlchemy的作者编写的数据库迁移工具。它可以帮助我们在不破坏数据的情况下更新数据库表的结构。使用Alembic可以向数据库发出ALTER语句以更改表的结构和其他结构。使用Alembic进行数据库迁移的过程是通过创建迁移环境、生成迁移文件、同步数据库等步骤来完成的。 具体使用Alembic进行数据库迁移的步骤如下: 1. 安装Alembic使用pip install alembic命令进行安装。 2. 初始化迁移环境:使用alembic init migrations命令初始化迁移环境,创建alembic.ini文件和env.py文件。 3. 修改配置:修改alembic.ini配置文件,将sqlalchemy.url的值配置为数据库连接字符串。 4. 生成迁移文件:使用alembic revision -m "first comment"命令生成迁移文件,可以通过--autogenerate选项参数来自动生成迁移脚本。 5. 同步数据库使用alembic upgrade head命令将数据库表结构更新到最新版本。 除了上述步骤外,还可以使用其他命令进行数据库迁移的管理和操作: - 查看当前数据库版本:使用alembic current命令可以查看数据库当前所处的版本。 - 查看迁移历史:使用alembic history命令可以查看项目目录中的迁移脚本信息。 - 更新数据库到指定版本:使用alembic upgrade 版本号命令可以将数据库更新到指定的版本。 - 降级数据库使用alembic downgrade 版本号命令可以将数据库降级到指定的版本。 - 离线更新:使用alembic upgrade 版本号 --sql > migration.sql命令可以将数据库更新生成SQL脚本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyvin.zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值