SQLAlchemy-Flask Bind не работает - NameError: имя 'TABLE' не определено - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу использовать Flask-SQLAlchemy Bind для подключения к вторичной базе данных Oracle.Я получаю сообщение об ошибке, в котором говорится, что таблица, к которой я хочу подключиться, не определена, хотя она определена в моей модели с добавлением соответствующей конфигурации привязки.Вот конкретная ошибка: NameError: имя 'ACCOUNT' не определено.Эта ошибка возникает перед любой попыткой фактически запросить базу данных.

Что мне не хватает?

Я просмотрел различные примеры через Google и StackOverflow и сравнил их с моим кодом, но я не вижу ничего необычного в настройке.

Вот соответствующие биты кода ... запросы mysql работают, запросы oracle - нет.

init.py

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)

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

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

Структура таблицы "CUSTOMERS" (MYSQL)

 id              INT     11
 name            VARCHAR 255

Структура таблицы "ACCOUNT" (Oracle)

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

Текущийрезультат: NameError: имя 'ACCOUNT' не определено

Ожидаемый результат: Запрос возвращается с результатом.

...