我想使用Heroku和Heroku Postgres部署FastAPI应用程序。不幸的是,Heroku部署数据库URL以postgres://
开头,而SQLAlchemy现在只允许postgresql://
。因此,我想直接在应用程序本身中更新DATABASE_URL
变量。
我试着手动更新它,至于Pydantic中的several建议:
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)
所有这些都给予相同的错误:
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres
从环境文件中获取该值后,如何更新该值?
1条答案
按热度按时间8yparm6h1#
问题出在SQLAlchemy上,而不是您指定或获取URL的方式。
如果SQLAlchemy删除了对"postgres://"的支持,请查看以下信息:sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres
你可以试试这个:postgresql + psycopg2://