2015-04-10 1 views
0

Я пытаюсь использовать flask-sqlalchemy для управления моей уже существующей базой данных mysql, и у меня есть таблица с именем content. Вот мой фрагмент кода.KeyError возникает, когда я запускаю приложение Flask (используя flask-sqlalchemy)

# coding:utf-8 
from flask import Flask, render_template 
from flask.ext.bootstrap import Bootstrap 
from flask.ext.sqlalchemy import SQLAlchemy 
... 

app = Flask(__name__) 
bootstrap = Bootstrap(app) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://...' 
db = SQLAlchemy(app) 


class Content(db.Model): 
    __table__ = db.Model.metadata.tables['content'] 

    def __repr__(self): 
     return '<title %r>' % self.title 


@app.route('/', methods=['GET', 'POST']) 
def index(): 
    return render_template('index.html') 

... 

if __name__ == '__main__': 
    app.run(debug=True) 

Когда я запускаю код выше, я получаю эту ошибку

Traceback (most recent call last): 
    File "hello.py", line 13, in <module> 
    class Content(db.Model): 
    File "hello.py", line 14, in Content 
    __table__ = db.Model.metadata.tables['content'] 
KeyError: 'content' 

Любая помощь будет оценена.

+0

«KeyError» показывает, что вы получаете доступ к таблице как «Содержимое», в то время как фрагмент кода показывает, что вы обращаетесь к нему как с «содержимым» - оба раза вызывают 'KeyError'? –

+0

@SeanVieira на самом деле я скопировал неправильный отчет, я изменил свой вопрос. Пожалуйста, проверьте. –

+0

Любая причина, по которой вы используете 'metadata.tables' вместо того, чтобы просто использовать' __table__ = 'content''? –

ответ

0

На основании this answer необходимо позвонить по телефону db.Model.metadata.reflect(db.engine), прежде чем создавать модель. Таким образом, метаданные существующей таблицы будут заполнены в metadata.tables.

Смежные вопросы