sqlalchemy.exc.ArgumentError:无法加载插件:sqlalchemy.dialects:driver

day*_*mer 26 python sqlalchemy psycopg2 alembic

我正在尝试运行alembic迁移,当我运行时

alembic revision --autogenerate -m "Added initial tables"
Run Code Online (Sandbox Code Playgroud)

它说不出来

sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver
Run Code Online (Sandbox Code Playgroud)

数据库网址是

postgresql+psycopg2://dev:passwd@localhost/db
Run Code Online (Sandbox Code Playgroud)

我甚至psycopg2安装在我的virtualenv中

$yolk -l
Flask-Login     - 0.1.3        - active
Flask-SQLAlchemy - 0.16         - active
Flask           - 0.9          - active
Jinja2          - 2.6          - active
Mako            - 0.7.3        - active
MarkupSafe      - 0.15         - active
Python          - 2.7.2        - active development (/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload)
SQLAlchemy      - 0.8.0        - active
Werkzeug        - 0.8.3        - active
alembic         - 0.4.2        - active
antiorm         - 1.1.1        - active
appscript       - 1.0.1        - active
distribute      - 0.6.27       - active
envoy           - 0.0.2        - active
osascript       - 0.0.4        - active
pep8            - 1.4.5        - active
pip             - 1.1          - active
psycopg2        - 2.4.6        - active
wsgiref         - 0.1.2        - active development (/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7)
yolk            - 0.4.3        - active
Run Code Online (Sandbox Code Playgroud)

什么可能导致这个问题?

zzz*_*eek 43

以下是如何产生这样的错误:

>>> from sqlalchemy import *
>>> create_engine("driver://")
Traceback (most recent call last):
... etc
sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver
Run Code Online (Sandbox Code Playgroud)

所以我说你实际上并没有使用你认为的postgresql URL - 你可能正在某个地方调用默认生成的alembic.ini.


Ant*_*ala 7

请注意,该方案实际上并未指定驱动程序,而是指定方言:该方案的形式为dialect:// or dialect+driver://

例如,连接到 PostgreSQL 数据库的正确 url 将以例如postgres://(默认为 using psycopg2)或显式选择驱动程序(postgres+psycopg2://或其他驱动程序)开头。

如果你碰巧 指定psycopg2你会得到错误

sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:psycopg2
Run Code Online (Sandbox Code Playgroud)


fia*_*jaf 5

对于尚未注意到它的人,zzzzeek所指的“默认生成的alembic.ini” 位于项目的根目录中。

整个问题是sqlalchemy.urlalembic.ini文件中设置config参数之一。另外,可以按照/sf/answers/1096772281/中的说明以编程方式进行设置。