Estoy tratando de conectarme a una base de datos de Postgres con SQLAlchemy. He instalado psycopg2. Sin embargo, aparece el error sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres . ¿Cómo configuro SQLAlchemy para conectarme a 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)El problema en heroku se resolvió mediante el uso de un código de reemplazo de url de python simple
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`fuente: https://help.heroku.com/ZKNTJQSK/why-is-sqlalchemy-1-4-x-not-connecting-to-heroku-postgres
SQLAlchemy 1.4 eliminó el nombre obsoleto del dialecto de postgres , ahora se debe usar el nombre postgresql en su lugar. El dialecto es la parte anterior a :// en la URL. SQLAlchemy 1.3 y versiones anteriores mostraban una advertencia de desaprobación, pero aun así la aceptaban.
Para solucionar esto, cambie el nombre postgres:// en la URL a postgresql:// .
Este error aparece actualmente cuando se trabaja con Heroku, que usa postgres en DATABASE_URL que proporcionan, que probablemente use para SQLALCHEMY_DATABASE_URI . Para evitar esto hasta que lo actualicen, actualice la variable en el tablero de Heroku para usar postgresql .
El URI debe comenzar con postgresql:// en lugar de postgres:// . SQLAlchemy solía aceptar ambos, pero eliminó la compatibilidad con el nombre de postgres .