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.
4 Réponses :
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?
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.
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))
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 .