sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres

Posted

技术标签:

【中文标题】sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres【英文标题】:sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres 【发布时间】:2020-10-22 13:48:33 【问题描述】:

我正在尝试使用 SQLAlchemy 连接到 Postgres 数据库。我已经安装了 psycopg2。但是,我收到错误sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres。如何配置 SQLAlchemy 以连接到 PostgreSQL?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "postgres://username@localhost:5432/template1"

db = SQLAlchemy(app)

【问题讨论】:

【参考方案1】:

URI 应以postgresql:// 开头,而不是postgres://。 SQLAlchemy 过去接受这两者,但已删除对 postgres 名称的支持。

【讨论】:

【参考方案2】:

SQLAlchemy 1.4 删除了已弃用的postgres 方言名称,现在必须使用名称postgresql。方言是 URL 中:// 之前的部分。 SQLAlchemy 1.3 及更早版本显示弃用警告,但仍接受它。

要解决此问题,请将 URL 中的 postgres:// 重命名为 postgresql://

当前使用 Heroku 时会出现此错误,它在他们提供的 DATABASE_URL 中使用 postgres,您可能将其用于 SQLALCHEMY_DATABASE_URI。要在他们更新之前解决此问题,请将 Heroku 仪表板中的变量更新为使用 postgresql

【讨论】:

如果变量是指配置变量,我尝试这样做并继续获得Item could not be updated: Cannot overwrite attachment values DATABASE_URL @Daniyaldehleh 我无法真正说出真正的问题是什么,因为你没有给我足够的信息来说明你到底做了什么。请让我知道您到底尝试了什么,我可以提供帮助 @Daniyaldehleh 我在您的 Python 脚本中使用了一个简单的替换方法,而不是在 Heroku 仪表板中,因为正如您提到的那样,这不起作用。所以你可以这样做:SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL?sslmode=require').replace('postgres://', 'postgresql://'). 谢谢大家!我实际上最终联系了 heroku,他们给了我这个解决问题的文档 (help.heroku.com/ZKNTJQSK/…)。代码:uri = os.getenv("DATABASE_URL") # or other relevant config var if uri.startswith("postgres://"): uri = uri.replace("postgres://", "postgresql://", 1) 添加上面的代码并尝试运行app.py后,输出如下错误:AttributeError: 'NoneType' object has no attribute 'replace'【参考方案3】:

使用简单的python url替换代码解决了heroku中的问题

import os
import re

uri = os.getenv("DATABASE_URL")  # or other relevant config var
if uri and uri.startswith("postgres://"):
    uri = uri.replace("postgres://", "postgresql://", 1)
# rest of connection code using the connection string `uri`

来源:https://help.heroku.com/ZKNTJQSK/why-is-sqlalchemy-1-4-x-not-connecting-to-heroku-postgres

【讨论】:

【参考方案4】:

URI 应该以 postgresql:// 而不是 postgres:// 开头 SQLAlchemy 过去接受这两者,但已删除对 Postgres 名称的支持。

【讨论】:

【参考方案5】:

完整的 URI 应该是:

app.config["SQLALCHEMY_DATABASE_URI"] ="postgresql://postgres:password@localhost:5432/template1"

app.config["SQLALCHEMY_DATABASE_URI"]= f'postgresql://db_user:db_pswd@db_host/db_name'

【讨论】:

【参考方案6】:

我也遇到了上述问题,并通过将 postgres:// 替换为 postgresql:// 来解决 而且工作正常。

【讨论】:

以上是关于sqlalchemy.exc.NoSuchModuleError:无法加载插件:sqlalchemy.dialects:postgres的主要内容,如果未能解决你的问题,请参考以下文章