programing

sqlalchemy.ex.해당 모듈 오류 없음:플러그인을 로드할 수 없습니다. sqlalchemy.dialects:postgres

muds 2023. 5. 11. 22:00
반응형

sqlalchemy.ex.해당 모듈 오류 없음:플러그인을 로드할 수 없습니다. sqlalchemy.dialects:postgres

SQL 화학으로 Postgres 데이터베이스에 연결하려고 합니다.싸이캅2를 설치했습니다.하지만 오류가 발생했습니다.sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgresPostgreSQL에 연결하도록 SQL 화학을 구성하려면 어떻게 해야 합니까?

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)

URI는 다음으로 시작해야 합니다.postgresql://대신에postgres://SQLAlchemy는 두 가지를 모두 수락했지만 지원을 제거했습니다.postgres이름.

SQLAlchemy 1.4는 사용되지 않는 제품을 제거했습니다.postgres방언 이름, 그 이름postgresql이제 대신 사용해야 합니다.방언은 앞에 있는 부분입니다.://SQLAlchemy 1.3 및 이전 버전에서는 사용되지 않는 경고가 표시되었지만 여전히 이를 수락했습니다.

이 문제를 해결하려면 이름 바꾸기postgres://의 URL에.postgresql://.

이 오류는 현재 다음을 사용하는 Heroku로 작업할 때 표시됩니다.postgres에서DATABASE_URL그들은 제공합니다, 당신이 아마도 사용할 것입니다.SQLALCHEMY_DATABASE_URI업데이트할 때까지 이 문제를 해결하려면 Heroku 대시보드에서 사용할 변수를 업데이트합니다.postgresql.

herku의 문제는 간단한 python url replace 코드를 사용하여 해결되었습니다.

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

이 문제를 해결하려면 이름 바꾸기postgres://의 URL에.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'

위의 모든 답변을 시도해 보았지만, 저에게는 이것만이 효과가 있었습니다.헤로쿠의 공식 제안(이전 댓글에 언급됨)을 따랐지만, 운이 없었습니다.마지막에 1개를 떼는 것 같아요.replace()도움이 되었을지도 모릅니다.

@Kaitlin Berryman이 Heroku 공식 답변이 작동하지 않는다고 말했듯, DB 자격 증명을 추가하지 않기 위해 이를 이전에 추가합니다.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

내가 찾은 모든 레시피는 동일한 "postgres 대신 postresql 사용"을 말합니다.하지만 제 DB 접두사가 이미 "postresql"이기 때문에 저에게는 작동하지 않습니다.

몇 가지 조사 후에 저는 그 문제를 발견했습니다."alembic.ini"에는 dburl에 대한 일반 템플릿이 포함되어 있습니다.sqlalchemy.url = driver://user:pass@localhost/dbname사용하다sqlalchemy.url = postgresql://user:pass@localhost/dbname대신.그건 효과가 있다.

@gitau-harrison 답변을 읽고 SQL 화학 문제임을 알고 Heroku 대시보드의 변수를 postgresql을 사용하도록 업데이트하는 대신 '요구 사항에서 SQL 화학의 버전을 변경했습니다.txt'에서 1.3.7(1.4.18)로 변경되었으며 이 문제가 해결되었습니다.

언급URL : https://stackoverflow.com/questions/62688256/sqlalchemy-exc-nosuchmoduleerror-cant-load-plugin-sqlalchemy-dialectspostgre

반응형