0
votes

AttributeError: l'objet 'NoneType' n'a pas d'attribut '_instantiate_plugins' (impossible d'importer create_engine)

import os

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker

engine=create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))

def main():
    flights = db.execute("SELECT origin, destination, duration FROM flights").fetchall()
    for flight in flights:
        print(f"{flight.origin} to {flight.destination}, {flight.duration} minutes.")

if __name__ == "__main__":
    main()
Traceback (most recent call last):
  File "list.py", line 6, in 
    engine=create_engine(os.getenv("DATABASE_URL"))
  File "C:\Users\Aakash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sqlalchemy\engine__init__.py",
line 479, in create_engine
    return strategy.create(*args, **kwargs)
  File "C:\Users\Aakash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sqlalchemy\engine\strategies.py", line 56, in create
    plugins = u._instantiate_plugins(kwargs)
AttributeError: 'NoneType' object has no attribute '_instantiate_plugins'And if change my code to: The Problem and the traceback is in the picture.

0 commentaires

4 Réponses :


1
votes

Il semble que os.getenv ("DATABASE_URL") renvoie None . L'appel de create_engine (None) vous donne cette erreur. DATABASE_URL est-il défini dans votre variable d'environnement?


0 commentaires

2
votes

utilisez simplement ceci comme URL "postgresql: // nom d'utilisateur: mot de passe @ hôte: port / base de données" passez directement ces valeurs dans votre create_engine("postgresql://username:password@host:port/database")

J'avais le même problème maintenant, c'est parti. Cela a fonctionné pour moi. La seule chose importante à mentionner est que j'ai eu une erreur complètement différente après avoir créé le nouvel utilisateur et la nouvelle base de données et déplacé les tables. L'erreur était "

'' ModuleNotFoundError: Aucun module nommé 'psycopg2' '' '

et la solution était en cours d'exécution: pip3 install psycopg2-binary

PS: détails de l'URL avec vos détails.


0 commentaires

0
votes

au lieu de

   engine = create_engine("postgresql://scott:tiger@localhost/mydatabase")
   db = scoped_session(sessionmaker(bind=engine))

saisissez ceci avec votre URL:

   engine=create_engine(os.getenv("DATABASE_URL"))
   db = scoped_session(sessionmaker(bind=engine))


0 commentaires

0
votes

Pour éviter de taper votre connexion postgresql (y compris le mot de passe) dans votre code définissez votre variable d'environnement dans votre terminal selon ceci:

. ~/.bash_profile

Ou vous pouvez utiliser la forme courte de la commande: p>

source ~/.bash_profile

Ceci exécute le fichier .bash_profile dans le shell actuel.

Des conseils supplémentaires concernant le rechargement du .bash_profile peuvent être trouvés dans les commentaires ici .


0 commentaires