J'essaie d'exécuter la migration alembic
et quand je lance
alembic revision --autogenerate -m "Added initial tables"
Il manque de dire
sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver
l'URL de la base de données est
postgresql+psycopg2://dev:passwd@localhost/db
et j'ai même psycopg2
installé dans mon 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
Whay pourrait être à l'origine de ce problème?
Voici comment produire une erreur comme celle-ci:
>>> from sqlalchemy import *
>>> create_engine("driver://")
Traceback (most recent call last):
... etc
sqlalchemy.exc.ArgumentError: Can't load plugin: sqlalchemy.dialects:driver
je dirais donc que vous n'utilisez pas réellement l'URL postgresql que vous pensez, vous appelez probablement un fichier alembic.ini généré par défaut quelque part.
Pour ceux qui ne l'ont pas remarqué, le "alembic.ini généré par défaut" zzzzeek fait référence à se trouver dans le répertoire racine du projet.
Tout le problème réside dans la définition du paramètre sqlalchemy.url
config dans le fichier alembic.ini
. En outre, il peut être défini par programme, comme expliqué dans https://stackoverflow.com/a/15668175/973380 .
Notez que le schéma ne spécifie pas le pilote mais le dialecte : le schéma est de la forme dialect://
ou dialect+driver://
.
Par exemple, les URL correctes pour se connecter à une base de données PostgreSQL devraient commencer par, par exemple, postgres://
(qui utilise par défaut psycopg2
) ou choisit explicitement un pilote (postgres+psycopg2://
ou un autre pilote).
Si vous spécifiez seulement psycopg2
, vous obtiendrez l'erreur
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:psycopg2
Essayez ces commandes pour installer les paquets manquants:
Sudo apt-get install libpq-dev
Sudo pip install psycopg2
Sudo pip install redshift-sqlalchemy
Sudo pip install sqlparse
Pour que les requêtes Teradata soient exécutées sur le fichier .exe produit par Pyinstaller. J'ai changé mon moteur de SQLAlchemy à Teradata
De :
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")