7
votes

AttributeError, l'objet 'dict' n'a aucun attribut 'iteritems'; Erreur de flacon-sqlalchemy en s'engageant à la base de données

J'essaie d'obtenir cela pour courir pendant un moment, mais apparemment en vain. J'ai une webApp qui demande aux données d'entrée utilisateur, qui sont alors engagées dans la DB. Lorsque je frappe Ajouter via le navigateur, les données sont transmises à la DB mais Werkzeug crachent un certain nombre d'erreurs, que j'ai détaillées ci-dessous dans la trace.

My View.py:

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, 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 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", line 267, in <listcomp>
    for receiver in self.receivers_for(sender)]
  File "/home/scire/programs/python/aalert/env/lib/python3.5/site-packages/flask_whooshalchemy.py", line 239, in _after_flush
    for model, values in bytype.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'


4 commentaires

Python 3? Les dicts n'ont pas cette méthode dans Python 3.


Il semble que flask_whooshalchemy n'est pas compatible Python 3.


Yep, on dirait que flask_whooshalchemy n'est actuellement pas compatible Python 3. github.com/gyllstromk/flask-whooshachalchemy/pull/28 pour un python 3 Branche compatible (j'espère). Vous pouvez toujours essayer d'utiliser cette branche à la place?


Demandé auparavant, voyez ceci: Stackoverflow.com/Questtions/30418481/...


3 Réponses :


5
votes

in python3 dict.items () fait la même chose que dict.iteritems () a fait à Python2. Il suffit de remplacer iteritems () avec les éléments () !


1 commentaires

Op n'a pas écrit ce code. Il vient de profond de la pile de flacon.




0
votes
pip install flask-whooshalchemy3

0 commentaires