How to update Settings variable in Pydantic after getting it from .env file?

Viewed 41

I want to deploy a FastAPI application with Heroku and Heroku Postgres. Unfortunately, Heroku deployment database URL starts with postgres:// whereas SQLAlchemy now only allows for postgresql://. Thus, I want to update the DATABASE_URL variable directly in the application itself.

I've tried to update it manually and as to several suggestions in Pydantic:

def get_database_url(url):
    if url.startswith("postgres://"):
        url = url.replace("postgres://", "postgresql://", 1)
    return URL

#attempt 1
class Settings(BaseSettings):
    load_dotenv()

    DATABASE_URL: str = get_database_url(os.getenv("DATABASE_URL"))


#attempt 2
class Settings(BaseSettings):
    ...

    class Config:
        @validator("DATABASE_URL", pre=True)
        def parse_env_var(cls, value: str):
            return get_database_url(value)

#attempt 3
class Settings(BaseSettings):
    ...

    class Config:
        @classmethod
        def parse_env_var(cls, field_name: str, raw_val: str) -> Any:
            if field_name == 'DATABASE_URL':
                return get_database_url(raw_val)
            return cls.json_loads(raw_val)


All of which give the same error:

sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres

How can I update this value after getting it from the environment file?

0 Answers
Related