【问题标题】:KeyError occurs when I run a Flask application (using flask-sqlalchemy)运行 Flask 应用程序时发生 KeyError(使用 flask-sqlalchemy)
【发布时间】:2015-06-16 08:10:46
【问题描述】:

我正在尝试使用 flask-sqlalchemy 来管理我预先存在的 mysql 数据库,并且我有一个名为 content 的表。这是我的代码 sn-p。

# 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'

我们将不胜感激。

【问题讨论】:

  • KeyError 显示您以 Content 访问该表,而代码 sn-p 显示您以 content 访问它 - 两种方式都会导致 KeyErrors 吗?
  • @SeanVieira 实际上我复制了错误的报告,我已经修改了我的问题。请查看。
  • 您为什么使用metadata.tables 而不是仅仅使用__table__ = 'content'
  • @SeanVieira 我从这里学到的。 stackoverflow.com/a/19064993/4144064.
  • 1.您在创建模型之前是否致电db.Model.metadata.reflect(db.engine)? 2.content表是否已经存在于DB中?

标签: flask flask-sqlalchemy


【解决方案1】:

基于this answer,您需要在创建模型之前调用db.Model.metadata.reflect(db.engine)。这样,现有表的元数据将填充到metadata.tables

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2015-03-03
    • 2020-04-26
    相关资源
    最近更新 更多