web-dev-qa-db-fra.com

sqlalchemy.exc.ArgumentError: Impossible de charger le plugin: sqlalchemy.dialects: driver

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?

20
daydreamer

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.

36
zzzeek

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 .

4
fiatjaf

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
3
Antti Haapala

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
1
Gilad

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