NoSuchModuleError: 无法加载插件: sqlalchemy.dialects:redshift.psycopg2

18

我正在尝试从我的Python代码连接到Redshift。 我已经安装了pip:

psycopg2==2.6.1
redshift-sqlalchemy==0.4.1
SQLAlchemy==1.0.9

我的虚拟机具备以下功能:

libpq-dev
python-psycopg2

但是我仍然收到了

 engine = create_engine('redshift+psycopg2://{}:{}@{}'.format(username, password, url))
  File "/opt/project/env/local/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 386, in create_engine
    return strategy.create(*args, **kwargs)
  File "/opt/project/env/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 51, in create
    entrypoint = u._get_entrypoint()
  File "/opt/project/env/local/lib/python2.7/site-packages/sqlalchemy/engine/url.py", line 131, in _get_entrypoint
    cls = registry.load(name)
  File "/opt/project/env/local/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 205, in load
    (self.group, name))
NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:redshift.psycopg2

使用相同的配置,我能够在我的笔记本电脑(Mac)上运行,但在Linux上,我猜测还缺少一些软件包?任何建议都将不胜感激,谢谢!


抱歉,之前的帖子并不真正有效。 - lucky_start_izumi
1
不要再费力地使用redshift.psycopg2了,直接使用postgresql+psycopg2就可以了,效果很好 :) - lucky_start_izumi
这个问题的确切解决方案是什么? 我需要连接到Redshift,但是postgresql+psycopg2无法正常工作。 - Sarang Manjrekar
6个回答

18
我发现一些教程中驱动程序被列为:postgres+psycopg2://......使用这个时,我收到了以下错误:

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

只需将其更改为:

postgresql+psycopg2://
        ^^

立即修复了它。


14

我也遇到了同样的问题,以下解决方案可以顺利解决。

环境:

Python 3.7

Conda 4.6.14

依赖项:

sudo apt-get install python-pip

sudo apt-get install libpq-dev

pip install --user psycopg2

pip install --user sqlalchemy

pip install --user sqlalchemy-redshift

连接字符串:

connection_string = sa_url.URL(
        drivername='postgresql+psycopg2',
        username='admin',
        password='admin',
        host='redshiftone.********.us-west-2.redshift.amazonaws.com',
        port='5439',
        database='redshiftone')

RDS代码示例,Python


1
sa_url是什么? - joydeep bhattacharjee
据我回忆,从sqlalchemy.engine中导入url作为sa_url。 - Asraful

6

一个导致 NoSuchModule 异常的愚蠢方式是数据库连接字符串格式错误。在我的情况下,当我更改了连接字符串时就会出现此错误。

DB_URI = 'postgresql://...'

to

DB_URI = 'pg8000://...'

但应该是:

DB_URI = 'postgresql+pg8000://

2

我曾经遇到过同样的问题,当我删除了redshift_sqlalchemy包中的__pycache__目录时,问题得到了解决。

进入你的site-packages目录,对于我的虚拟环境来说是在cdvirtualenvcd lib/python3.5/site-packages/redshift_sqlalchemy最后执行rm __pycache__命令即可。


嗨,尝试删除__pycache__目录,但仍然出现相同的错误。无法加载插件:sqlalchemy.dialects:redshift.psycopg2 - Sarang Manjrekar
你重启了服务吗?请告诉我你正在遵循哪些步骤。 - paridin
@paridin 需要重启哪些服务?目前,我通过退出虚拟环境并在主Python环境中运行来解决了这个问题。它可以正常运行。 - Sarang Manjrekar
当您启动一个使用端口的进程时,它就是一个服务。我使用带有笔记本的iPython来工作,因此我需要重新启动该服务以获取干净的进程。我建议从您的代码中删除__pycache__文件夹,如果您有一个requirements文件,则应删除您的环境并重新创建一个新的环境。这是简单的方法,如果您有时间,您必须查找site-packages中的引用并将其删除。我不建议使用主环境,因为您可能会破坏它,并且很难修复。 - paridin

2
这对我有用:
!pip install -U psycopg2-binary sqlalchemy-redshift SQLAlchemy

0
这对我也起作用。在连接URL中,不需要指定redshift+pyscopg2,而是可以指定redshift+redshift_connector。这将使用亚马逊官方的Redshift Python驱动程序以及他们的SQLAlchemy实现,而不是psycopg2。在这种情况下,如果只连接到Redshift,您甚至不需要安装psycopg2
您需要安装这两个模块:
pip install sqlalchemy-redshift
pip install redshift_connector

然后像这样创建引擎:
engine = create_engine('redshift+redshift_connector://{}:{}@{}'.format(username, password, url))

参考:https://aws.amazon.com/blogs/big-data/use-the-amazon-redshift-sqlalchemy-dialect-to-interact-with-amazon-redshift/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接