错误: 无法加载插件:

我想用 SQLAlchemy 连接 Postgres 数据库。我安装了神经病2。但是,我得到了错误 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)
105825 次浏览

URI 应该以 postgresql://而不是 postgres://开始。SQLAlchemy 过去接受这两个名称,但是已经取消了对 postgres名称的支持。

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

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

这个错误当前在使用 Heroku 时显示出来,Heroku 在它们提供的 DATABASE_URL中使用了 postgres,您可能在 SQLALCHEMY_DATABASE_URI中使用了 postgres。为了解决这个问题,直到他们更新它,更新 Heroku 仪表板中的变量,使用 ABc3。

Heroku 中的问题已经通过使用简单的 pythonurl 替换代码解决了

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

要解决这个问题,请将 URL 中的 postgres://重命名为 postgresql+psycopg2://

# production or dev DB
try:
prodURI = os.getenv('DATABASE_URL')
prodURI = prodURI.replace("postgres://", "postgresql://")
app.config['SQLALCHEMY_DATABASE_URI'] = prodURI


except:
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql:///MYDATABASE'

我尝试了以上所有的答案,但只有这个对我有用。我关注了 赫罗库的官方建议(在之前的评论中提到过) ,但是没有收获。我认为在 replace()结束时取消1可能会有所帮助。

正如 @ Kaitlin Berryman所说,Heroku 官方的回答是不起作用的,为了避免把你的数据库凭证放在 db.create_all()之前:

# create the database and the db table
import os
import re


uri = os.getenv("DATABASE_URL")
# or other relevant config var
if uri.startswith("postgres://"):
uri = uri.replace("postgres://", "postgresql://", 1)
app.config['SQLALCHEMY_DATABASE_URI'] = uri

在阅读了@gitau-harrison 的回答并且知道这是一个 SQLAlchemy问题之后,我没有更新 Heroku 指示板中的变量使用 postgreql,而是将“ requments.txt”中的 SQLAlchemy 的版本改为1.3.7(原为1.4.18) ,这样我就解决了这个问题。