python – AttributeError,’dict’对象没有属性’iteritems’;提交到数据库时出现Flask-SQLAlchemy错误

前端之家收集整理的这篇文章主要介绍了python – AttributeError,’dict’对象没有属性’iteritems’;提交到数据库时出现Flask-SQLAlchemy错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直试图让它运行一段时间,但似乎无济于事.我有一个webapp请求用户输入数据,然后将其提交给数据库.当我通过浏览器点击添加时,数据会传递给数据库,但是Werkzeug会发回一些错误,我在下面的跟踪中详细介绍了这些错误.

我的views.py:

from flask import request,flash,render_template,url_for,redirect
from aalert import app,db
import flask_whooshalchemy
from flask_login import LoginManager,login_required,logout_user
from aalert.forms import *

from aalert.models import User,PubInfo,PrivInfo

login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'

@login_manager.user_loader
def load_user(userid):
    return User.query.filter(User.id==userid).first()

@app.route('/signup',methods=['GET','POST'])
def signup():
    form = SignupForm()
    if form.validate_on_submit():
        user = User(username=form.username.data,password = form.password.data)
        db.session.add(user)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('signup.html',form=form)

#pubinfo index
@app.route('/')
def index():
    entries = PubInfo.query.all()
    return render_template('disp_tables.html',entries=entries)


@app.route('/login','POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first_or_404()
        if user.is_correct_password(form.password.data):
            login_user(user)
            return redirect(url_for('add'))
        else:
            flash('Incorrect username and password!')
    return render_template('login.html',form=form)


@app.route('/show_all')
@login_required
def show_all_data():
    entries = PubInfo.query.join(PrivInfo,PubInfo.id==PrivInfo.id)
    return render_template('disp_all.html',entries)


@app.route('/add',methods=['POST','GET'])
#@login_required #login required to add functions,points to @login_manager.user_loader
def insert():
    form = AddEntry()
    if request.method == 'POST':
        if not request.form['firstname'] or not request.form['lastname'] or not request.form['age'] or not request.form['height'] or not request.form['last_loc'] or not request.form['missing_since'] or not request.form['contact_info'] or not request.form['home_address']:
            flash('Please ensure all fields are filled out!')
        else:
            pubentry = PubInfo(request.form['firstname'],request.form['lastname'],request.form['age'],request.form['height'],request.form['last_loc'],request.form['missing_since'])

            priventry = PrivInfo(request.form['contact_info'],request.form['home_address'])
            db.session.add(pubentry)
            db.session.add(priventry)
            db.session.commit()
            flash('Record successfully added.')
            return redirect(url_for('index'))
    return render_template('add.html',form=form)


@app.route('/search','GET'])
def search():
    form = SearchForm()
    if request.method == 'POST':
        result = pubinfo.query.whoosh_search(request.form['search_query'])
        return render_template('results.html',result=result)
    return render_template('search.html',form=form)




@app.route('/logout')
def logout():
    logout_user()

    return redirect(url_for('index'))


@app.route('/test')
def test():
    return redirect(url_for('login'))

错误的痕迹:

Traceback (most recent call last):
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 2000,in __call__
    return self.wsgi_app(environ,start_response)
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 1991,in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 1567,in handle_exception
    reraise(exc_type,exc_value,tb)
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/_compat.py",line 33,in reraise
    raise value
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 1988,in wsgi_app
    response = self.full_dispatch_request()
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 1641,in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 1544,in handle_user_exception
    reraise(exc_type,line 1639,in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask/app.py",line 1625,in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/scire/programs/python/aalert/aalert/views.py",line 75,in insert
    db.session.commit()
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/sqlalchemy/orm/scoping.py",line 157,in do
    return getattr(self.registry(),name)(*args,**kwargs)
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/sqlalchemy/orm/session.py",line 801,in commit
    self.transaction.commit()
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/sqlalchemy/orm/session.py",line 399,in commit
    self.session.dispatch.after_commit(self.session)
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/sqlalchemy/event/attr.py",line 256,in __call__
    fn(*args,**kw)
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py",line 231,in after_commit
    models_committed.send(session.app,changes=list(d.values()))
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/blinker/base.py",line 267,in send
    for receiver in self.receivers_for(sender)]
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/blinker/base.py",in 
最佳答案
在Python3中,dict.items()执行与dict.iteritems()在Python2中所做的相同的事情.只需用items()替换iteritems()即可!

猜你在找的Python相关文章