SQLModel 使用技巧
1. 主键在数据库中,主键都是设置成非空的。不过在SQLModel中,主键需要设置成可空的,如:
1id: int | None = Field(default=None, primary_key=True)
这是因为这里的id 是由数据库自动生成的,而非在Python代码中。因此在创建一个实例的时候,一般都不会设置id,直到持久化到数据库中。因此,需要设置成可空字段,以免数据校验出错。
2. 连接数据库可以通过create_engine创建一个数据库连接:
1234sqlite_file_name = "database.db"sqlite_url = f"sqlite:///{sqlite_file_name}"engine = create_engine(sqlite_url, echo=True)
创建一个异步的数据库连接(需要安装aiosqlite包):
123456789from sqlalchemy.ext.asyncio import create_async_enginefrom sqlmodel.ext ...
SQLModel 入门
1. 简介SQLModel 建立在 SQLAlchemy 之上,提供了简化的连接管理和事务处理,同时直接支持 MySQL 数据类型和简化了外键和关系的定义,非常适合轻量级应用程序和小型项目。它可以使用 Pydantic 来定义模型,并且可以自动将这些模型映射到数据库表。这使得开发者可以轻松地进行数据库操作,而无需编写大量的 SQL 代码。
2. 安装首先,需要安装 FastAPI 和 SQLModel:
12pip install fastapi[all]pip install sqlmodel
3. 定义模型使用 SQLModel 定义模型非常简单。你只需要从 SQLModel 继承并添加字段即可。
123456from sqlmodel import SQLModel, Fieldclass User(SQLModel, table=True): id: int = Field(default=None, primary_key=True) name: str age: int
4. SQLModel的独特之处
基于Pydantic,继承了 Pydantic ...
pytest 单元测试覆盖率
pytest-cov 是一个用于测量 Python 代码测试覆盖率的 pytest 插件。它允许你在运行测试时自动收集覆盖率数据,并在测试完成后显示一个详细的报告。这对于确保你的代码库被充分测试非常有用。以下是如何使用 pytest-cov 的基本步骤:
安装首先,你需要确保已经安装了 pytest。如果尚未安装,可以通过 pip 安装它:
1pip install pytest
然后,安装 pytest-cov:
1pip install pytest-cov
使用安装后,你可以在命令行中使用 --cov 选项来运行 pytest 并收集覆盖率数据。
示例假设你的项目结构如下:
12345678your_project/ │ ├── your_module/ │ ├── __init__.py │ └── your_script.py │ └── tests/ └── test_your_script.py
在命令行中,你可以运行以下命令来收集 your_module 目录下的代码覆盖率数据:
1pytest --cov=your_module
...
pytest conftest 案例
一个FastAPI 项目 conftest.py 的案例,主要包含了配置文件定义、测试数据库的初始化、数据库session创建、HTTP客户端创建等fixture。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100@pytest_asyncio.fixture(scope="session", autouse=True)async def application(): """应用app.""" from app.main import app yield app@pytest_asyncio.fixture(scope="session", ...
pytest conftest
conftest.py 是 pytest 中的一个特殊文件,用于定义全局的配置、夹具(fixtures)、钩子函数和插件。下面将详细解析 conftest.py 文件的用法,包括使用方法、规则、建议和案例。
使用方法
创建 conftest.py 文件:在项目根目录或子目录下创建 conftest.py 文件。这个文件不需要显式导入,pytest 会自动识别并执行其中的配置。
定义夹具(fixtures):在 conftest.py 中,可以使用 @pytest.fixture 装饰器来定义全局夹具。这些夹具可以在多个测试模块中被共享和使用。
定义钩子函数:conftest.py 还可以定义全局的钩子函数,如 pytest_runtest_setup 和 pytest_runtest_teardown,这些函数分别在测试用例执行前后执行。
配置全局信息:在 conftest.py 中,可以定义一些全局的配置信息,如日志级别、报告输出路径等。
导入自定义插件:conftest.py 还可以用于导入自定义的 pytest 插件,以扩展 pytest 的功能。
规则
文件名称固定:conf ...
pytest fixture 使用
在自动化测试中,测试环境的准备与清理是确保测试稳定性和可重复性的关键步骤。pytest 框架通过其内置的 fixture 机制,为测试提供了灵活且强大的初始化与清理方案。本文将深入探讨 pytest fixture 的工作原理、使用场景、高级特性及其在实际测试中的应用。
一、Fixture 概述Fixture 是 pytest 中用于设置测试前置条件、执行测试后清理工作的功能。它可以是任何函数、类或者模块,通过特定的装饰器进行标记,以便 pytest 在测试执行过程中自动调用。Fixture 的设计哲学是“显式优于隐式”,它鼓励开发者在测试代码中明确指定测试依赖的资源和清理工作,从而提高代码的可读性和可维护性。
二、Fixture 的基本用法1. 定义 Fixture使用 @pytest.fixture 装饰器来定义一个 fixture。fixture 函数可以接收参数,并返回一个值,这个值会被测试函数作为参数接收。
123456789101112import pytest @pytest.fixture def database(): # 设置数据库连接 ...
pytest 简介
pytest是一个功能强大且易于使用的Python测试框架,它主要用于编写单元测试、集成测试和功能测试。
一、pytest的安装
安装命令:pip install pytest
验证安装:使用pytest --version命令来查看已安装的pytest版本,如果终端显示一个版本号,则说明安装成功。
二、pytest的命名规范
测试模块:测试文件应以”test_”开头或以”_test”结尾,例如test_login.py或user_test.py。
测试类:测试类必须以Test开头命名,且测试类中不能有__init__方法。
测试方法/测试函数:测试方法/测试函数必须以test开头。
三、pytest的常用运行参数
无参数:读取路径下符合条件的所有类、函数、方法全部执行。
-v:打印详细运行日志。
-s:打印print输出。
-k:跳过运行某个或某些用例,如pytest -k '类名'、pytest -k '方法名'。
-x:运行用例失败立即停止运行。
–maxfail:用例失败数达到某个设定的值停止运行,如pytest --ma ...
FastAPI redis-om 使用指南
redis-om 是一个用于在 Redis 中存储和查询对象的高级库。它提供了一种简单的方式来将 Python 对象映射到 Redis 数据结构上。结合 FastAPI,你可以快速构建高性能的 API 服务。以下是使用 FastAPI 和 redis-om 的一些基本步骤。
安装依赖首先,你需要安装 FastAPI 和 redis-om 库。
12pip install fastapi[all] # 安装 FastAPI 及其所有推荐依赖pip install redis-om # 安装 redis-om
定义模型使用 redis-om 定义一个模型,该模型将映射到 Redis 数据库中的数据。
1234567891011121314from redis_om import HashModelclass Book(HashModel): title: str author: str page_count: int genre: str class Meta: global_key_prefix = "test" ...
FastAPI Cache 自定义 key builder
FastAPI Cache的@cache 装饰器会自动收集被装饰的函数参数,构建缓存key。不过在实际使用过程中,默认key builder会在有些场景下会不适用。
1、不包含self的key builder主要用于装饰一个类中的方法,需要在构建key的时候去掉参数的类方法中的self参数。
123456789101112131415161718192021def noself_key_builder( func: Callable, namespace: Optional[str] = "", request: Optional[Request] = None, response: Optional[Response] = None, args: Optional[tuple] = None, kwargs: Optional[dict] = None,) -> str: """使用在类函数上的cache key builder. 本key builder在计算key的时候忽略se ...
FastAPI Cache
一、FastAPI Cache 配置要在 FastAPI 中使用缓存,我们可以使用 fastapi-cache 这个第三方库。下面是配置 fastapi-cache 的步骤:
1. 安装 fastapi-cache首先,安装 fastapi-cache 库。
1pip install fastapi-cache
2. 配置缓存后端fastapi-cache 支持多种缓存后端,如 Redis、Memcached 等。以下是一个使用 Redis 作为缓存后端的配置示例:
12345678910111213from fastapi import FastAPIfrom fastapi_cache import FastAPICachefrom fastapi_cache.backends.redis import RedisBackendfrom fastapi_cache.decorator import cacheapp = FastAPI()# 配置 Redis 缓存后端FastAPICache.init( backend=RedisBackend(redis_url=&quo ...