Mahbub
Mahbub

Reputation: 95

AttributeError: 'NoneType' object has no attribute '_instantiate_plugins' (Cannot import 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.

Upvotes: 8

Views: 33600

Answers (6)

Nivesh chourey
Nivesh chourey

Reputation: 1

I was having this error because of environment variable in windows.. Environment variable of database(pinot) was not properly configured. check your variable name and key both.

Upvotes: 0

B. Latif
B. Latif

Reputation: 52

In my case, the problem was occurring because I hadn't put the correct path of the file I was trying to upload to my AWS db.

Upvotes: 0

Albin
Albin

Reputation: 912

To avoid typing your postgresql connection (including password) in your code define your environment variable in your terminal according this:

source ~/.bash_profile

Or you can use the short form of the command:

. ~/.bash_profile

This executes .bash_profile file in the current shell.

Additional advices concerning reloading .bash_profile can be found in the comments here.

Upvotes: 0

liza
liza

Reputation: 33

instead of

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

type this with your url:

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

Upvotes: 0

BraveStone9
BraveStone9

Reputation: 53

just use this as url "postgresql://username:password@host:port/database" directly pass these values inside your create_engine("postgresql://username:password@host:port/database")

I was having the same problem now its gone.That worked for me. Only thing important to mention is that I got a different error altogether after creating the new user and database and moving the tables. The error was '

'' ModuleNotFoundError: No module named 'psycopg2' '''

and the solution was running: pip3 install psycopg2-binary

PS: URL details with you details.

Upvotes: 4

Jona
Jona

Reputation: 1286

It looks like os.getenv("DATABASE_URL") is returning None. Calling create_engine(None) give you this error. Is DATABASE_URL defined in your environment variable ?

Upvotes: 8

Related Questions