create_engine () отсутствует 1 обязательный позиционный аргумент: 'engine_opts - PullRequest
0 голосов
/ 19 мая 2019

приложение работало нормально вчера дома на другой системе **, когда я пытался запустить его на другой системе (** недавно установил все ) - , поэтому я предполагаю, что эта ошибка только для последней версии.

цель состоит в том, чтобы подключить пользователя в сеансе ко второй базе данных

Я получил эту ошибку: create_engine() missing 1 required positional argument: 'engine_opts'

Мой текущий код:

app.config['SQLALCHEMY_DATABASE_URI'] = "postgres:// ****" #main database
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = "True"
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = "None" #i didnt have that line in my system 
before i've just added it in attempt of fixing this issue

db = SQLAlchemy(app,session_options={"autoflush": False})


@app.route('/test')
def test():
    x = 'postgres://*****' #secondary database for user in session only.
    engine = db.create_engine(x)

return ''

Вещи, которые я пробовал:

проверка страницы библиотеки: библиотека flask_SQLAlchemy

Все, что я нашел об этом, было так:

create_engine ( sa_url, engine_opts ) Переопределите этот метод, чтобы получить final скажем, как создается движок SQLAlchemy.

В большинстве случаев вы захотите использовать конфигурацию 'SQLALCHEMY_ENGINE_OPTIONS' переменная или установите engine_options для SQLAlchemy ().

после поисков вокруг я увидел несколько примеров, и ни один из них не сработал.

Попытка # 01:

db.create_engine(DB_URL,**engine_opts)

Выход:

NameError: имя 'engine_opts' не определено

Попытка № 02:

db.create_engine(DB_URL,**db.engine_opts)

Выход:

AttributeError: у объекта «SQLAlchemy» нет атрибута «engine_opts»

Попытка № 03:

db.create_engine(DB_URL,engine_opts='None')

Выход:

TypeError: аргумент create_engine () после ** должен быть отображением, а не str

Попытка # 04:

db.create_engine(DB_URL,engine_opts=None)

TypeError: аргумент create_engine () после ** должен быть отображением, а не NoneType

Попытка № 05:

db.create_engine(xDB,db.engine_opts='None')

Системные сбои "даже не работал" :

SyntaxError: ключевое слово не может быть выражением

Попытка № 06:

db.create_engine(xDB,{'SQLALCHEMY_ENGINE_OPTIONS': None})

Выход:

 return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\project1\app.py", line 175, in test
    engine = db.create_engine(xDB,{'SQLALCHEMY_ENGINE_OPTIONS': None})
  File "C:\Users\Rick\AppData\Local\Programs\Python\Python37\lib\site-packages\flask_sqlalchemy\__init__.py", line 966, in create_engine
    return sqlalchemy.create_engine(sa_url, **engine_opts)
  File "C:\Users\Rick\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\__init__.py", line 435, in create_engine
    return strategy.create(*args, **kwargs)
  File "C:\Users\Rick\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\engine\strategies.py", line 87, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "C:\Users\Rick\AppData\Local\Programs\Python\Python37\lib\site-packages\sqlalchemy\dialects\postgresql\psycopg2.py", line 632, in dbapi
    import psycopg2
ModuleNotFoundError: No module named 'psycopg2'

Попытка № 07:

после установки psycopg2 на основе # Attempt06

db.create_engine(xDB,{'SQLALCHEMY_ENGINE_OPTIONS': None})

Выход:

TypeError: Invalid argument(s) 'SQLALCHEMY_ENGINE_OPTIONS' sent to create_engine(), using configuration PGDialect_psycopg2/QueuePool/Engine.  Please check that the keyword arguments are appropriate for this combination of components.

1 Ответ

0 голосов
/ 19 мая 2019

в заключение:

db.create_engine(DB_URL,{}) работал для меня.

Объясняя почему:

версия flask_SQLAlchemy, которую я имею на своемсобственный компьютер был 2.3.2

свежая установленная версия была 2.4.0

, которая имеет эту функцию, вы можете прочитать ее прямо здесь. flask_SQLAlchemy - Изменения версии 2.4.0

  • Сделать конфигурацию двигателя более гибкой ( # 684 )

, котораяизменили способ создания нового двигателя.до db.create_engine(DB_URL) было достаточно

...