webentwicklung-frage-antwort-db.com.de

sqlalchemy.exc.ArgumentError: Plugin kann nicht geladen werden: sqlalchemy.dialects: driver

Ich versuche, die alembic-Migration auszuführen und wenn ich ausgeführt werde 

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

Es versagt zu sagen

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

die Datenbank-URL lautet 

postgresql+psycopg2://dev:[email protected]/db

und ich habe sogar psycopg2 in meiner virtualenv installiert

$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

Wer könnte dieses Problem verursachen?

20
daydreamer

So erzeugen Sie einen Fehler:

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

ich würde also sagen, dass Sie nicht die postgresql-URL verwenden, von der Sie denken, dass Sie sie sind - Sie rufen wahrscheinlich irgendwo eine standardmäßig generierte alembic.ini an.

36
zzzeek

Für diejenigen, die es nicht bemerkt haben, befindet sich die "standardmäßig generierte alembic.ini", auf die zzzzeek verweist, im Stammverzeichnis des Projekts.

Das ganze Problem besteht darin, den Parameter sqlalchemy.url config in der Datei alembic.ini einzustellen. Es kann auch programmgesteuert festgelegt werden, wie in https://stackoverflow.com/a/15668175/973380 erläutert.

4
fiatjaf

Beachten Sie, dass das Schema nicht wirklich den Treiber angibt, sondern das dialect : Das Schema hat die Form dialect:// oder dialect+driver://.

Die richtigen URLs zum Herstellen einer Verbindung zu einer PostgreSQL-Datenbank würden beispielsweise mit postgres:// beginnen (standardmäßig psycopg2 verwendet) oder explizit einen Treiber auswählen (postgres+psycopg2:// oder mit einem anderen Treiber).

Wenn Sie only psycopg2 angeben, wird der Fehler angezeigt

sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:psycopg2
3
Antti Haapala

Führen Sie die folgenden Befehle aus, um fehlende Pakete zu installieren:

Sudo apt-get install libpq-dev 
Sudo pip install psycopg2 
Sudo pip install redshift-sqlalchemy 
Sudo pip install sqlparse
1
Gilad

Um die Teradata-Abfragen für die von Pyinstaller erzeugte .exe auszuführen. Ich habe meine Engine von SQLAlchemy zu Teradata geändert 

Von :

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)

Zu: 

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") 
0
Tyger Guzman