在 alembic 中配置 env.py 文件时使用 .env 变量
using .env variables when configuring env.py file in alembic
根据我看到的帖子,这是将 alembic.ini sqlalchemy.url 指向 alembic env.py 文件中所需的数据库路径的最常见方法
import os
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
connection_string = f'postgresql+psycopg2://<username>:<password>@localhost/test_server'
config = context.config
config.set_main_option('sqlalchemy.url', connection_string)
当值只是一个硬编码字符串时,这对我有用。
但是,当我尝试用来自我的 .env 文件的隐藏变量替换用户名和密码值时,我总是收到操作错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: role "None" does not exist
username = os.environ.get("USERNAME")
password = os.environ.get("PASSWORD")
connection_string = f'postgresql+psycopg2://{username}:{password}@localhost/test_server'
config = context.config
config.set_main_option('sqlalchemy.url', connection_string)
我做错了什么不允许我使用我的环境变量?
我建议像这样使用 dotenv (pip install python-dotenv
):
import os
from dotenv import load_dotenv
load_dotenv()
username = os.environ.get("USERNAME")
password = os.environ.get("PASSWORD")
(dotenv 没有任何外部库依赖,这很好)
根据我看到的帖子,这是将 alembic.ini sqlalchemy.url 指向 alembic env.py 文件中所需的数据库路径的最常见方法
import os
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
connection_string = f'postgresql+psycopg2://<username>:<password>@localhost/test_server'
config = context.config
config.set_main_option('sqlalchemy.url', connection_string)
当值只是一个硬编码字符串时,这对我有用。 但是,当我尝试用来自我的 .env 文件的隐藏变量替换用户名和密码值时,我总是收到操作错误:
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: role "None" does not exist
username = os.environ.get("USERNAME")
password = os.environ.get("PASSWORD")
connection_string = f'postgresql+psycopg2://{username}:{password}@localhost/test_server'
config = context.config
config.set_main_option('sqlalchemy.url', connection_string)
我做错了什么不允许我使用我的环境变量?
我建议像这样使用 dotenv (pip install python-dotenv
):
import os
from dotenv import load_dotenv
load_dotenv()
username = os.environ.get("USERNAME")
password = os.environ.get("PASSWORD")
(dotenv 没有任何外部库依赖,这很好)