AttributeError: объект «NoneType» не имеет атрибута «_instantiate_plugins» (невозможно импортировать create_engine)

avatar
Mahbub
15 апреля 2020 в 20:27
13442
5
2
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()

Отслеживание (последний последний вызов): Файл "list.py", строка 6, в двигатель = create_engine (os.getenv («URL-адрес базы данных»)) Файл "C:\Users\Aakash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sqlalchemy\engine__init__.py", строка 479, в create_engine return Strategy.create(*args, **kwargs) Файл "C:\Users\Aakash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\sqlalchemy\engine\strategies.py", строка 56, при создании плагины = u._instantiate_plugins(kwargs) AttributeError: объект «NoneType» не имеет атрибута «_instantiate_plugins»

И если изменить мой код на:

Проблема и трассировка показаны на картинке.

Источник

Ответы (5)

avatar
B. Latif
8 марта 2022 в 21:28
0

В моем случае проблема возникла из-за того, что я не указал правильный путь к файлу, который пытался загрузить в базу данных AWS.

avatar
Albin
19 февраля 2021 в 10:11
0

Чтобы не вводить ваше соединение postgresql (включая пароль) в вашем коде, определите переменную среды в вашем терминале следующим образом:

source ~/.bash_profile

Или вы можете использовать короткую форму команды:

. ~/.bash_profile

Выполняет файл .bash_profile в текущей оболочке.

Дополнительные советы по перезагрузке .bash_profile можно найти в комментариях здесь.

avatar
liza
8 июня 2020 в 17:21
2

вместо

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

введите это вместе со своим URL:

   engine = create_engine("postgresql://scott:tiger@localhost/mydatabase")
   db = scoped_session(sessionmaker(bind=engine))
avatar
BraveStone9
6 июня 2020 в 20:38
3

просто используйте это как URL "postgresql://имя пользователя:пароль@хост:порт/база данных" напрямую передайте эти значения внутри вашего create_engine("postgresql://username:password@host:port/database")

У меня была та же проблема, теперь она ушла. Мне помогло. Единственное, что важно отметить, это то, что я получил другую ошибку после создания нового пользователя и базы данных и перемещения таблиц. Ошибка была "

'' ModuleNotFoundError: Нет модуля с именем "psycopg2" '''

и решение работало: pip3 install psycopg2-binary

PS: детали URL с вашими данными.

avatar
Jona
15 апреля 2020 в 21:29
2

Похоже, os.getenv("DATABASE_URL") возвращает None. Вызов create_engine(None) дает вам эту ошибку. Определен ли DATABASE_URL в вашей переменной среды?