7
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.

Jonathan Leffler
  • 730,956
  • 141
  • 904
  • 1,278
Mahbub
  • 75
  • 1
  • 1
  • 5

6 Answers6

8

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 ?

Jona
  • 1,218
  • 1
  • 10
  • 20
4

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.

BraveStone9
  • 53
  • 10
1

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))
imbr
  • 6,226
  • 4
  • 53
  • 65
liza
  • 35
  • 3
  • 3
    Why would you expose your connection string in your codebase? – Steve Scott Jul 18 '22 at 20:21
  • This response does not make any sense whatsoever. If you set the environmental variable correctly, you don't need to expose your credentials. – Banik Aug 26 '22 at 13:11
0

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.

Albin
  • 822
  • 1
  • 7
  • 25
0

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.

B. Latif
  • 54
  • 7
0

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.

  • Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Aug 15 '22 at 12:46