使用 SQLAlchemy 和 fastAPI 连接到数据库时出错
Error connecting to database with SQLAlchemy and fastAPI
我在一个 fastAPI 小应用程序上有这个设置:
host_server = os.environ.get('host_server', 'localhost')
db_server_port = urllib.parse.quote_plus(str(os.environ.get('db_server_port', '5432')))
database_name = os.environ.get('database_name', 'mydatabasename123')
db_username = urllib.parse.quote_plus(str(os.environ.get('db_username', 'myusername123')))
db_password = urllib.parse.quote_plus(str(os.environ.get('db_password', 'mypassword123')))
ssl_mode = urllib.parse.quote_plus(str(os.environ.get('ssl_mode', 'prefer')))
DATABASE_URL = 'postgresql://{}:{}@{}:{}/{}?sslmode={}'.format(db_username, db_password, host_server, db_server_port,
database_name, ssl_mode)
database = databases.Database(DATABASE_URL)
它在本地有效,但当我尝试将它部署到 heroku 时,我做了一些更改。我正在使用 Heroku 上提供的 DATABASE_URL env 变量:
DATABASE_URL = 'postgres://...'
database = databases.Database(DATABASE_URL)
或正在做
DATABASE_URL = os.environ.get('DATABASE_URL')
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
engine = sqlalchemy.create_engine(
DATABASE_URL, pool_size=3, max_overflow=0, echo=True
)
日志给我:
: at=error code=H10 desc="App crashed" method=GET path="/"
“postgres”不再被接受为 SQLAlchemy 中的方言名称。正确的形式是“postgresql”,因为你在本地使用:
DATABASE_URL = 'postgresql://...'
使用'postgres://...'
加注
sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string 'postgres//...'
此更改是在 SQLAlchemy 中引入的 1.4.0b1
我在一个 fastAPI 小应用程序上有这个设置:
host_server = os.environ.get('host_server', 'localhost')
db_server_port = urllib.parse.quote_plus(str(os.environ.get('db_server_port', '5432')))
database_name = os.environ.get('database_name', 'mydatabasename123')
db_username = urllib.parse.quote_plus(str(os.environ.get('db_username', 'myusername123')))
db_password = urllib.parse.quote_plus(str(os.environ.get('db_password', 'mypassword123')))
ssl_mode = urllib.parse.quote_plus(str(os.environ.get('ssl_mode', 'prefer')))
DATABASE_URL = 'postgresql://{}:{}@{}:{}/{}?sslmode={}'.format(db_username, db_password, host_server, db_server_port,
database_name, ssl_mode)
database = databases.Database(DATABASE_URL)
它在本地有效,但当我尝试将它部署到 heroku 时,我做了一些更改。我正在使用 Heroku 上提供的 DATABASE_URL env 变量:
DATABASE_URL = 'postgres://...'
database = databases.Database(DATABASE_URL)
或正在做
DATABASE_URL = os.environ.get('DATABASE_URL')
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
engine = sqlalchemy.create_engine(
DATABASE_URL, pool_size=3, max_overflow=0, echo=True
)
日志给我:
: at=error code=H10 desc="App crashed" method=GET path="/"
“postgres”不再被接受为 SQLAlchemy 中的方言名称。正确的形式是“postgresql”,因为你在本地使用:
DATABASE_URL = 'postgresql://...'
使用'postgres://...'
加注
sqlalchemy.exc.ArgumentError: Could not parse rfc1738 URL from string 'postgres//...'
此更改是在 SQLAlchemy 中引入的 1.4.0b1