create_engine()缺少1个必需的位置参数:'engine_opts

时间:2019-05-19 14:29:06

标签: python python-3.x flask sqlalchemy flask-sqlalchemy

昨天,

应用在家里的其他系统上运行良好**当我尝试在其他系统上运行它(**全新安装了一切)时-所以我认为此错误仅适用于最新版本。

目标是将会话中的用户连接到第二个数据库

我收到此错误: 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 Library

我发现的全部是这样:

  

create_engine sa_url,engine_opts )覆盖此方法以使用final   说说如何创建SQLAlchemy引擎。

     

在大多数情况下,您将需要使用“ SQLALCHEMY_ENGINE_OPTIONS”配置   变量或为SQLAlchemy()设置engine_options。

在谷歌搜索之后,我看到了一些例子,但没有一个起作用。

尝试#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:

根据#Attempt06安装psycopg2

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.

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我修好了。

试试:

from SQLAlchemy import create_engine

engine = create_engine(URI)

而不是:

import SQLAlchemy

db = SQLAlchemy()
db.create_engine(URI)

答案 1 :(得分:0)

总结:

db.create_engine(DB_URL,{})为我工作。

解释原因:

我在自己的计算机上安装的flask_SQLAlchemy的版本是2.3.2

新安装的版本为2.4.0

具有该功能,您可以在那里阅读。 flask_SQLAlchemy - Changes Version 2.4.0

  • 使引擎配置更加灵活(#684
  

这改变了我们创建新引擎的方式。   在db.create_engine(DB_URL)还不够之前