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

时间:2013-03-26 22:44:14

标签: python sqlalchemy psycopg2 alembic

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

alembic revision --autogenerate -m "Added initial tables"

说不清楚

sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver

数据库网址是

postgresql+psycopg2://dev:passwd@localhost/db

我甚至在我的virtualenv中安装了psycopg2

$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

Whay可能导致这个问题?

9 个答案:

答案 0 :(得分:38)

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

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

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

答案 1 :(得分:4)

对于那些没有注意到的人,“default-generated alembic.ini” zzzzeek 引用的是在项目的根目录中。

整个问题是在sqlalchemy.url文件中设置alembic.ini config参数。此外,它可以按https://stackoverflow.com/a/15668175/973380中的说明以编程方式设置。

答案 2 :(得分:3)

请注意,该方案实际上并未指定驱动程序,而是 dialect :方案的格式为dialect:// dialect+driver://。< / p>

例如,连接到PostgreSQL数据库的正确URL将以例如postgres://(默认使用psycopg2)开头,或明确选择驱动程序(postgres+psycopg2://,或者另一个司机)。

如果您恰好指定 psycopg2,您将收到错误

sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:psycopg2

答案 3 :(得分:1)

尝试使用这些命令安装缺少的软件包:

sudo apt-get install libpq-dev 
sudo pip install psycopg2 
sudo pip install redshift-sqlalchemy 
sudo pip install sqlparse

答案 4 :(得分:0)

要使Teradata查询在Pyinstaller生成的.exe上运行。我将引擎从SQLAlchemy更改为Teradata

发件人:

import sqlalchemy as sa
user, pasw, hostname = UserName,Password, 'myurl.com'
# connect
td_engine = sa.create_engine('teradata://{}:{}@{}:22/'.format(user,pasw,hostname),echo=True)
df = pd.read_sql_query(query1,connect)

收件人:

import teradata
user, pasw, hostname = UserName,Password, 'myurl.com'
td = teradata.UdaExec (appName="test", version="1.0", logConsole=True)
td_engine = td.connect(method="odbc",system=hostname, username=user,password=pasw,driver="Teradata") 

答案 5 :(得分:0)

我做到了

pip install ibm_db_sa

已解决问题

答案 6 :(得分:0)

我解决了这一问题,只需在记事本++中打开alembic.ini,然后将变量sqlachemy.url(在第38行上)修改为我的项目文件中的url。该错误很可能是由于开头有驱动程序引起的。

即将该行重命名为

sqlalchemy.url = sqlite:///name_of_my_database.db

答案 7 :(得分:0)

要以编程方式覆盖 alembic.ini 中的默认值,您可以在 alembic/env.py 中添加一两行代码:

+ import app

[...snip...]

  # this is the Alembic Config object, which provides
  # access to the values within the .ini file in use.
  config = context.config

+ config.set_section_option(
    config.config_ini_section, "sqlalchemy.url", app.settings.SQLALCHEMY_DATABASE_URL
)

其中 import appapp.settings.SQLALCHEMY_DATABASE_URL 替换为您自己的应用程序特定代码以检索 URL。

答案 8 :(得分:-2)

如果有,请卸载anaconda。它是在anaconda路径中安装mysql连接器,而您的代码可能正在python路径中查找。