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?
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.
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.
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
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
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")