flask 新手遇到KEYERROR问题

KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS'

sql代码

 from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///'+os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =True
db = SQLAlchemy(app)
class Role(db.Model):
    __tablename__ = 'roles'#__tablename__ 定义在数据库中使用的表名
    id = db.Column(db.Integer, primary_key=True)#primary_key如果设为 True ,这列就是表的主键.如果没有定义 __tablename__ ,SQLAlchemy 会使用一个默认名字
    name = db.Column(db.String(64), unique=True)
    users = db.relationship('User', backref='role')
    def __repr__(self):
        return '<Role % r>' % self.name
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
    def __repr__(self):
        return '<User % r>' % self.username

```主程序代码



from flask import Flask,render_template,url_for,session,redirect,flash
from flask_bootstrap import Bootstrap
from flask.ext.moment import Moment
import os
from flask_sqlalchemy import SQLAlchemy
from flask.ext .wtf import Form
from wtforms import StringField,SubmitField #字段类型类导入 字符串,提交
from wtforms.validators import DataRequired #从表单验证 导入 请求
from datetime import datetime
from sql import db,User,Role,app

class NameForm(Form):
name = StringField('你的名字 ?',validators=[DataRequired()]) #DataRequired()[验证函数]表示数据示为必须非空
submit = SubmitField('提交')

app = Flask(__name__)
app.config['SECRET_KEY'] ='hard to guess string'
bootstrap = Bootstrap(app)
monent = Moment(app)
@app.route('/',methods=['GET','POST']) #app后面的metheds参数告诉Flask 在URL映射中吧视图函数注册为Get Post请求的处理程序.如果没有metheds
#参数,就只把视图函数注册为GET请求的处理程序
def index():
form = NameForm()
if form.validate_on_submit():#如果数据能被所有验证函数接收(上面的)返回True 否则False
user = User.query.filter_by(username = form .name.data).first()
if user is None:
user = User(username = form.name.data )
db.session.add(user)
session['known'] =False
else:
session['known']= True
session['name'] = form.name.data
form .name.data=''
return redirect(url_for('index'))
return render_template('user.html',form = form ,name=session.get('name'),known = session.get('known',False))

@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'),404
if name == '__main__':

app.run(debug=True)

```一提交表单就错误 图片![图片说明](https://img-ask.csdn.net/upload/201801/12/1515731831_287746.png)图片说明

不知道你的版本是多少,这个是2.0以后的,保存的话换成SQLALCHEMY_ON_TEARDOWN属性试试

SQLALCHEMY_ON_TEARDOWN属性试

错误信息如下:
flask_sqlalchemy__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.
warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')
1
2
错误信息提示的很明确,修改 SQLALCHEMY_TRACK_MODIFICATIONS 为True以移除这个警告。
尝试进行了如下修改:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
1
然而并没有什么卵用。去flask_sqlalchemy的init.py里面修改吧。
在init.py里面有init_app方法,修改下面的一行:
track_modifications = app.config.setdefault('SQLALCHEMY_TRACK_MODIFICATIONS', True)
1
然后保存,重新运行。搞定!