测试平台接口开发日记03

2783 篇文章 4 订阅
2643 篇文章 26 订阅

上一节已经写好了数据库操作的基类封装,本节主要是针对数据库模型的编写和更新同步。

生成数据库模型


在 models 模块下新建一个models_user.py文件,引入 sqlalchemy 编写数据库模型,具体代码如下:

from sqlalchemy import (
    Column,
    Integer,
    String,
    Boolean,
    DateTime
)
from datetime import datetime
from src.app.core.db.base import Base


__all__ = [
    "User"
]


class User(Base):
    __tablename__ = "user"

    id = Column(Integer, primary_key=True, index=True)
    mobile = Column(String(20), nullable=True)
    username = Column(String(20), nullable=True)
    password = Column(String(50), nullable=True)
    mailbox = Column(String(100), nullable=True)
    is_delete = Column(Boolean, default=False)
    created_time = Column(DateTime, default=datetime.now())
    updated_time = Column(DateTime, onupdate=datetime.now,
                          default=datetime.now())

    def __repr__(self):
        return f"""
            <Users(
                  id='{self.id}', mobile='{self.mobile}', username='{self.username}', 
                  password='{self.password}', mailbox='{self.mailbox}', is_delete='{self.is_delete}'
            )>
        """

上述代码中是创建表结构的一些信息,主要是运用了sqlalchemy中提供的一些方法。这个网上教程很多,可自行百度了解下。

Alembic迁移表结构


表结构代码编写完成后,然后就是来迁移表结构到数据库中,这里我们使用alembic来迁移表结构。

首先使用 pip 安装 alembic ,代码如下:

(venv) PS E:\github_codes\codes\fastapi-back-end-test> pip install alembic -i https://pypi.douban.com/simple/

其次 alembic 安装完成后,然后进入到工程目录下的 src下,运行 alembic init alembic 命令,代码如下:

(venv) PS E:\github_codes\codes\fastapi-back-end-test\src> alembic init alembic
Creating directory E:\github_codes\codes\fastapi-back-end-test\src\alembic ...  done
Creating directory E:\github_codes\codes\fastapi-back-end-test\src\alembic\versions ...  done
Generating E:\github_codes\codes\fastapi-back-end-test\src\alembic.ini ...  done
Generating E:\github_codes\codes\fastapi-back-end-test\src\alembic\env.py ...  done
Generating E:\github_codes\codes\fastapi-back-end-test\src\alembic\README ...  done
Generating E:\github_codes\codes\fastapi-back-end-test\src\alembic\script.py.mako ...  done
Please edit configuration/connection/logging settings in 'E:\\github_codes\\codes\\fastapi-back-end-test\\src\\alembic.ini' before proceeding.

最后在命令运行完成后,在 src 下会生成一个 alembic 工程目录和一个 alembic.ini 。

配置alembic中的文件


首先要先去 alembic.ini 文件中找到 sqlalchemy.url 变量,然后把值换成自己的数据库连接信息(ps:如果是mysql数据库,一定要先建好数据库。),数据库连接信息格式如下:

sqlalchemy.url=mysql+pymysql://root:123456@10.10.12.199:3307/back_end

其次在 alembic 目录中找到 env.py 文件,导入 core 模块中 db 模块中的 base.py 和 models 模块中的 models_user.py。具体导包如下:

from src.app.models.models_plan import Plan
from src.app.models.models_user import User
from src.app.models.models_case import Case
from src.app.models.models_report import (
    Report, ReportRecord
)
from src.app.core.db.base import Base
from logging.config import fileConfig

from sqlalchemy import engine_from_config
from sqlalchemy import pool
import os
import sys
from alembic import context

curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(os.path.split(rootPath)[0])

# from src.app.core.db.base import Base


# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config

# 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
# target_metadata = None
target_metadata = Base.metadata

最后记得把变量 target_metadata 的值修改为 Base.metadata,这样脚本运行的时候会找到我们关联的数据库模型。

开始同步表结构


首先再次进入到工程目录 src 下,然后运行 alembic revision --autogenerate -m 命令,代码如下:

(venv) PS E:\github_codes\codes\fastapi-back-end-test\src> alembic revision --autogenerate -m "提交表结构"
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'users'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_users_id' on '['id']'
Generating E:\github_codes\codes\fastapi-back-end-test\src\alembic\versions\ea2f23976842_提交表结构.py ...  done

其次运行完毕后,alembic目录下的versions目录下会出现一条提交记录,打开提交记录的.py文件,会看到以下代码(如无代码,则是没有需要更新的东西,或者配置有误):

"""提交表结构

Revision ID: ea2f23976842
Revises: 
Create Date: 2023-06-01 18:02:56.447388

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'ea2f23976842'
down_revision = None
branch_labels = None
depends_on = None


def upgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('user',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('mobile', sa.String(length=20), nullable=True),
    sa.Column('username', sa.String(length=20), nullable=True),
    sa.Column('password', sa.String(length=50), nullable=True),
    sa.Column('mailbox', sa.String(length=100), nullable=True),
    sa.Column('is_delete', sa.Boolean(), nullable=True),
    sa.Column('created_time', sa.TIMESTAMP(), nullable=False),
    sa.Column('updated_time', sa.TIMESTAMP(), nullable=False),
    sa.PrimaryKeyConstraint('id')
    )
    op.create_index(op.f('ix_users_id'), 'user', ['id'], unique=False)
    # ### end Alembic commands ###


def downgrade() -> None:
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_index(op.f('ix_users_id'), table_name='users')
    op.drop_table('users')
    # ### end Alembic commands ###

然后再执行 alembic upgrade head 命令往指定数据库更新表结构,代码如下:


(venv) PS E:\github_codes\codes\fastapi-back-end-test\src> alembic upgrade head
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> ea2f23976842, 提交表结构

最后数据库连接Navicat进行界面查看,会生成 alembic_version 和 users 表结构。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取【保证100%免费】

在这里插 入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值