升级Pydantic 2.6后CosmosDB配置字段缺失报错求助
解决Pydantic v2.6中CosmosSettings字段缺失错误
问题根源
你的代码存在两个关键错误,直接导致Pydantic无法正确解析环境变量:
- 字段类型定义完全错误:
connection_string被定义为int类型,但CosmosDB连接字符串本质是字符串格式,Pydantic无法将.env中的字符串值转换为整数,因此判定该字段缺失。database_name被定义为dict类型,而数据库名称是字符串,同样无法完成类型转换,触发缺失错误。
- Pydantic v2配置写法过时:虽然旧版
Config类在v2中暂时兼容,但官方推荐使用新的model_config字典形式,避免潜在兼容性问题。
修复后的代码
from pydantic_settings import BaseSettings # Pydantic v2中BaseSettings已移至pydantic_settings模块 from azure.cosmos import CosmosClient class CosmosSettings(BaseSettings): connection_string: str # 修正为正确的字符串类型 database_name: str # 修正为正确的字符串类型 model_config = { "extra": "allow", "env_file": ".env", "env_file_encoding": "utf-8", "fields": { "connection_string": {"env": "COSMOS_CONNECTION_STRING"}, "database_name": {"env": "COSMOS_DATABASE_NAME"}, } } settings = CosmosSettings() class BaseDB: def __init__(self, container: str): self.client = CosmosClient.from_connection_string(settings.connection_string) self.database = self.client.get_database_client(settings.database_name) self.container = self.database.get_container_client(container)
额外验证步骤
- 确认
.env文件中环境变量格式正确:COSMOS_CONNECTION_STRING="你的CosmosDB连接字符串" COSMOS_DATABASE_NAME="你的数据库名称" - 安装Pydantic v2所需的独立配置包:
pip install pydantic-settings
内容的提问来源于stack exchange,提问作者cp-stack
相关产品推荐
相关产品推荐

