46

alembic移行を実行しようとしていますが、実行すると

alembic revision --autogenerate -m "Added initial tables"

それは言うのに失敗します

sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver

データベースのURLは

postgresql+psycopg2://dev:passwd@localhost/db

そして私psycopg2は自分のvirtualenvにインストールしました

$yolk -l
Flask-Login     - 0.1.3        - active
Flask-SQLAlchemy - 0.16         - active
Flask           - 0.9          - active
Jinja2          - 2.6          - active
Mako            - 0.7.3        - active
MarkupSafe      - 0.15         - active
Python          - 2.7.2        - active development (/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload)
SQLAlchemy      - 0.8.0        - active
Werkzeug        - 0.8.3        - active
alembic         - 0.4.2        - active
antiorm         - 1.1.1        - active
appscript       - 1.0.1        - active
distribute      - 0.6.27       - active
envoy           - 0.0.2        - active
osascript       - 0.0.4        - active
pep8            - 1.4.5        - active
pip             - 1.1          - active
psycopg2        - 2.4.6        - active
wsgiref         - 0.1.2        - active development (/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7)
yolk            - 0.4.3        - active

なぜこの問題を引き起こしている可能性がありますか?

4

11 に答える 11

69

このようなエラーを生成する方法は次のとおりです。

>>> from sqlalchemy import *
>>> create_engine("driver://")
Traceback (most recent call last):
... etc
sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver

したがって、実際には、自分が思っているpostgresql URLを使用していないと思います。おそらく、デフォルトで生成されたalembic.iniをどこかで呼び出しているのでしょう。

于 2013-03-27T16:51:56.853 に答える
10

気づいていない人のために、zzzzeekが参照する「デフォルトで生成されたalembic.ini」プロジェクトのルートディレクトリにあります。

全体的な問題は、ファイルにsqlalchemy.urlconfigパラメーターを設定することです。alembic.iniまた、https://stackoverflow.com/a/15668175/973380で説明されているように、プログラムで設定することもできます。

于 2015-10-06T02:50:34.880 に答える
7

スキームは実際にはドライバーを指定していませんが、方言を指定していることに注意してください。スキームは形式dialect:// または dialect+driver://です。

たとえば、PostgreSQLデータベースに接続するための正しいURLは、たとえばpostgres://(デフォルトでは使用psycopg2)で始まるか、ドライバーを明示的に(postgres+psycopg2://または別のドライバーで)選択します。

たまたま指定し psycopg2場合は、エラーが発生します

sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:psycopg2
于 2017-08-31T10:13:08.483 に答える
1

これを解決するには、notepad ++でalembic.iniを開き、変数sqlachemy.url(約38行目)をプロジェクトファイルのURLに修正します。このエラーは、最初にドライバーが含まれていることが原因である可能性があります。

つまり、この行の名前を次のように変更します

sqlalchemy.url = sqlite:///name_of_my_database.db
于 2020-09-19T17:38:23.740 に答える
0

これらのコマンドを試して、不足しているパッケージをインストールしてください。

sudo apt-get install libpq-dev 
sudo pip install psycopg2 
sudo pip install redshift-sqlalchemy 
sudo pip install sqlparse
于 2015-05-04T15:07:56.637 に答える
0

Pyinstallerによって生成された.exeでTeradataクエリを実行するため。エンジンをSQLAlchemyからTeradataに変更しました

から :

import sqlalchemy as sa
user, pasw, hostname = UserName,Password, 'myurl.com'
# connect
td_engine = sa.create_engine('teradata://{}:{}@{}:22/'.format(user,pasw,hostname),echo=True)
df = pd.read_sql_query(query1,connect)

に:

import teradata
user, pasw, hostname = UserName,Password, 'myurl.com'
td = teradata.UdaExec (appName="test", version="1.0", logConsole=True)
td_engine = td.connect(method="odbc",system=hostname, username=user,password=pasw,driver="Teradata") 
于 2019-01-15T22:00:08.657 に答える
0

のデフォルト値をプログラムでオーバーライドするにはalembic.ini、次のコードに1行か2行のコードを追加しますalembic/env.py

+ import app

[...snip...]

  # this is the Alembic Config object, which provides
  # access to the values within the .ini file in use.
  config = context.config

+ config.set_section_option(
    config.config_ini_section, "sqlalchemy.url", app.settings.SQLALCHEMY_DATABASE_URL
)

ここでimport app、およびapp.settings.SQLALCHEMY_DATABASE_URLは、URLを取得するための独自のアプリケーション固有のコードに置き換えられます。

于 2021-07-27T14:56:56.107 に答える
0

選択したデータベースに応じて、エンジンを作成するための正しい構文に従っていて、create_engine(f"<dialect_name>+<driver_name>://{self.user}:{self.password}@{self.host}:{self.port}/{self.database})ここで他の提案のいずれも問題を解決しない場合は、次の段落で概説する解決策を試すことができます。

この問題はNoSuchModuleError: Can't load plugin: sqlalchemy.dialects:\<dialect_name\>.\<driver_name\>、必要なドライバーをサポートするSQLAlchemyバージョンを実行することで発生する可能性があります。たとえば、SQLAlchemy1.4.26はこれらのPostgreSQLドライバーをサポートしています。だから、解決策:

  1. 必要な方言については、サポートされているドライバーのドキュメントを確認してください。
  2. 次に、SQLAlchemyまたは問題のあるドライバーをアンインストールしますpip uninstall SQLAlchemy
  3. pipに特定のバージョンのSQLAlchemyまたは代替ドライバーをインストールするように強制します。pip install SQLAlchemy==1.0.14
于 2021-10-28T09:23:44.323 に答える
0
connection_url=""  
#your database connection string here pulled from either environment variable , vaults or can be set directly

def run_migrations_offline():
    """Run migrations in 'offline' mode.

    This configures the context with just a URL
    and not an Engine, though an Engine is acceptable
    here as well.  By skipping the Engine creation
    we don't even need a DBAPI to be available.

    Calls to context.execute() here emit the given string to the
    script output.

    """
    url = connection_url 
    context.configure(
        url=url,
        target_metadata=target_metadata,
        literal_binds=True,
        dialect_opts={"paramstyle": "named"},
    )

    with context.begin_transaction():
        context.run_migrations()


def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    configdict=config.get_section(config.config_ini_section)
    configdict.update({"sqlalchemy.url":connection_url})
    connectable = engine_from_config(
        configdict,
        prefix="sqlalchemy.",
        poolclass=pool.NullPool,
    )

    with connectable.connect() as connection:
        context.configure(
            connection=connection, target_metadata=target_metadata
        )

        with context.begin_transaction():
            context.run_migrations()

デフォルトを参照せずにPythonファイル自体から接続URLを読み取りたい場合

alembic.ini

設定ファイル。

于 2021-12-13T15:25:57.250 に答える
-1

アナコンダがある場合はアンインストールします。mysqlコネクタをanacondaパスにインストールしており、コードはおそらくpythonパスを探しています。

于 2020-04-09T16:46:49.650 に答える
-2

やった、

pip install ibm_db_sa

問題を修正しました

于 2019-12-19T14:54:22.773 に答える