使用环境时FastAPI中需要的Pydantic验证错误字段



我在YouTube上的FreeCodeCamp上学习Python API开发课程,我们将一些静态值移动到环境变量中。这是我在尝试重新加载应用程序时得到的错误:

pydantic.error_wrappers.ValidationError: 8 validation errors for Settings
database_hostname
field required (type=value_error.missing)
database_port
field required (type=value_error.missing)
database_password
field required (type=value_error.missing)
database_name
field required (type=value_error.missing)
database_username
field required (type=value_error.missing)
secret_key
field required (type=value_error.missing)
algorithm
field required (type=value_error.missing)
access_token_expire_minutes
field required (type=value_error.missing)

这是我模式(config.py):

class Settings(BaseSettings):
database_hostname: str
database_port: str
database_password: str
database_name: str
database_username: str
secret_key: str
algorithm: str
access_token_expire_minutes: int
class Config:
env_file = '../.env'

这是我的环境(.env):

DATABASE_HOSTNAME=localhost
DATABASE_PORT=5432
DATABASE_PASSWORD=password
DATABASE_NAME=fastapi
DATABASE_USERNAME=postgres
SECRET_KEY=123456789
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=60

我如何使我的basessettings类能够读取。env文件中的环境变量?

我能够通过在项目中使用完整路径来解决这个错误。我有主项目文件夹和.env文件和app文件夹。我的config.py文件在app/中,所以从config到env文件的相对路径是/../.env:

别忘了导入os

class Settings(BaseSettings):
database_hostname: str
database_port: str
database_password: str
database_name: str
database_username: str
secret_key: str
algorithm: str
access_token_expire_minutes: int
class Config:
env_file = f"{os.path.dirname(os.path.abspath(__file__))}/../.env"

最新更新