Alembic - 尝试自动生成修订版会抛出“sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgresql.psycopg”

问题描述 投票:0回答:1

我是 Alembic 和 SQLAlchemy 的新手。

我的任务是向现有的 FastAPI + SQLAlchemy 应用程序添加 Alembic 支持。为此,我通过调用

alembic init
进行了一些初步设置,并更新了
alembic.ini
env.py
文件。

然后我尝试调用

alembic revision --autogenerate -m "Initial revision"
但 Alembic 抛出了这个错误:

$ alembic revision --autogenerate -m "Initial revision"
Traceback (most recent call last):
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\Scripts\alembic.exe\__main__.py", line 7, in <module>
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\config.py", line 632, in main
    CommandLine(prog=prog).main(argv=argv)
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\config.py", line 626, in main
    self.run_cmd(cfg, options)
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\config.py", line 603, in run_cmd
    fn(
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\command.py", line 236, in revision
    script_directory.run_env()
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\script\base.py", line 582, in run_env
    util.load_python_file(self.dir, "env.py")
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\util\pyfiles.py", line 94, in load_python_file
    module = load_module_py(module_id, path)
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\alembic\util\pyfiles.py", line 110, in load_module_py
    spec.loader.exec_module(module)  # type: ignore
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Users\Desmond\Projects\application-git\extraction_accuracy\api\accuracy\alembic\env.py", line 8, in <module>
    from database.session import DatabaseModelBase
  File "C:\Users\Desmond\Projects\application-git\extraction_accuracy\api\accuracy\.\database\session.py", line 8, in <module>
    engine = create_engine(
  File "<string>", line 2, in create_engine
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\deprecations.py", line 309, in warned
    return fn(*args, **kwargs)
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\create.py", line 534, in create_engine
    entrypoint = u._get_entrypoint()
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\engine\url.py", line 655, in _get_entrypoint
    cls = registry.load(name)
  File "C:\Users\Desmond\AppData\Local\Programs\Python\Python310\lib\site-packages\sqlalchemy\util\langhelpers.py", line 343, in load
    raise exc.NoSuchModuleError(
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgresql.psycopg

我已经检查过,我已经在我的全局包中安装了 psycopg:

$ pip list | grep psyco
psycopg                         3.1.12
psycopg-binary                  3.1.12

我还更新了 alembic.ini 和 env.py 文件中的相关细节:

alembic.ini:

sqlalchemy.url = postgresql://%(USERNAME)s:%(PASSWORD)s@%(HOST)s:%(PORT)s/%(DB_NAME)s

env.py(环境变量也已在当前 shell 中创建):

config = context.config

section = config.config_ini_section
config.set_section_option(
    section, "HOST", os.environ.get("DATABASE_HOST")
)
config.set_section_option(
    section, "PORT", os.environ.get("DATABASE_PORT")
)
config.set_section_option(
    section, "DB_NAME", os.environ.get("DATABASE_NAME")
)
config.set_section_option(
    section, "USERNAME", os.environ.get("USERNAME")
)
config.set_section_option(
    section, "PASSWORD", os.environ.get("PASSWORD")
)
target_metadata = DatabaseModelBase.metadata

堆栈跟踪中的 DatabaseModelBase 是 session.py 中 declarative_model() 的实例。

请帮忙。

python sqlalchemy alembic
1个回答
0
投票

如果它在 mc 环境上运行,那么那就是内核故障 但从猜测它是 Windows 环境删除我需要你删除当前的 psycopg 全局包,因为 Windows 倾向于不运行 psycopg 包我认为这是一个错误我之前也遇到过同样的错误

我希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.