首页 > 解决方案 > SQLAlchemy-Flask 绑定不起作用 - NameError: name 'TABLE' is not defined

问题描述

我正在寻找使用 Flask-SQLAlchemy Bind 连接到辅助 Oracle 数据库。我收到一个错误,说我要连接的表没有定义,尽管它是在我的模型中定义的,并添加了适当的绑定配置。这是具体的错误: NameError: name 'ACCOUNT' is not defined 。此错误发生在任何尝试实际查询数据库之前。

我错过了什么?

我通过 Google 和 StackOverflow 浏览了各种示例,并将它们与我的代码进行了比较,但我没有看到任何与设置不同的地方。

以下是相关的代码... mysql 查询有效,oracle 查询无效。

初始化文件

from flask_sqlalchemy import SQLAlchemy

database_url = "mysql+pymysql://root:xxxx@localhost:3306/db1"
dbbind_url = "oracle://dbuser:xxxx@10.0.0.1:1521/db2" 

app.config["SQLALCHEMY_DATABASE_URI"] = database_url
app.config["SQLALCHEMY_BINDS"] = {
    'oracle': dbbind_url
     }
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False 

db = SQLAlchemy(app)

模型.py

## Mysql Model (working)
class CUSTOMERS (db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
## Oracle Model (not working)
class ACCOUNT(db.Model):
    __tablename__ = 'ACCOUNT'
    __bind_key__ = 'oracle'
    account_id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True)
    account = db.Column(db.String(400), nullable=False)

视图.py

 @app.route('/helper', methods=['GET','POST'])
 def helper_search():

 form = HelperSearchForm()

 if form.validate_on_submit():

     accountquery = form.account.data
     print (accountquery)
     accountInfo = ACCOUNT.query.filter_by(ACCOUNT=accountquery).first()

 return redirect(url_for('helper_accountdetail',account=accountInfo))

“客户”表结构 (MYSQL)

 id              INT     11
 name            VARCHAR 255

“帐户”表结构 (Oracle)

 ACCOUNT_ID      NUMBER(11,0)   
 ACCOUNT         VARCHAR2(400 BYTE)     

当前结果是:NameError: name 'ACCOUNT' is not defined

预期结果是:查询返回结果。

标签: python-3.xflaskflask-sqlalchemy

解决方案


推荐阅读