我是 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() 的实例。
请帮忙。
如果它在 mc 环境上运行,那么那就是内核故障 但从猜测它是 Windows 环境删除我需要你删除当前的 psycopg 全局包,因为 Windows 倾向于不运行 psycopg 包我认为这是一个错误我之前也遇到过同样的错误
我希望这有帮助