Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sqlalchemy.orm.exc.UnmappedInstanceError in flask

Tags:

I have been reading the SQLAlchemy docs, but I don't understand them. The error (UnmappedInstanceError) says something isn't mapped. What isn't mapped? I really don't get sqlalchemy and I want to go back to using naked sqlite, but so many people recommend this, so I thought I should learn it. Here is the traceback:

File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1836, in __call__ return self.wsgi_app(environ, start_response)  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1820, in wsgi_app response = self.make_response(self.handle_exception(e))  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1403, in handle_exception reraise(exc_type, exc_value, tb)  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1817, in wsgi_app response = self.full_dispatch_request()  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request rv = self.handle_user_exception(e)  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1381, in handle_user_exception reraise(exc_type, exc_value, tb)  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request rv = self.dispatch_request()  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\flask\app.py", line 1461, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args)  File "C:\Users\Me\repos\mandj2\app\views.py", line 170, in add_manentry db.session.add(q)  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\sqlalchemy\orm\scoping.py", line 149, in do return getattr(self.registry(), name)(*args, **kwargs)  File "C:\Users\Me\repos\mandj\venv\lib\site-packages\sqlalchemy\orm\session.py", line 1452, in add raise exc.UnmappedInstanceError(instance)  UnmappedInstanceError: Class '__builtin__.unicode' is not mapped 

Here is the applicable code:

@app.route('/addm', methods=['POST']) def add_mentry():     if not session.get('logged_in'):         abort(401)     form = MForm(request.form)     filename = ""     if request.method == 'POST':         cover = request.files['cover']         if cover and allowed_file(cover.filename):             filename = secure_filename(cover.filename)             cover = cover.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))      q = request.form['name']     # do for 12 more fields     db.session.add(q)     db.session.commit()     flash('New entry was successfully posted')     return redirect(url_for('moutput')) 
like image 227
user2986242 Avatar asked Jan 17 '14 22:01

user2986242


People also ask

How does ORM use ORM in Flask?

In Flask web applications, to manipulate databases, we can use SQL and Object Relational Mapping (ORM). An ORM makes writing SQL queries easier for a programmer, because it enables us to write queries in an object-oriented language, and then ORM automatically translates it to SQL and retrieves the result as an object.

Is Flask-SQLAlchemy ORM?

Flask-SQLAlchemy Extension Because SQLAlchemy is a common database abstraction layer and object relational mapper that requires a little bit of configuration effort, there is a Flask extension that handles that for you. This is recommended if you want to get started quickly. You can download Flask-SQLAlchemy from PyPI.

How do you add a SQLAlchemy to a Flask?

Step 1 - Install the Flask-SQLAlchemy extension. Step 2 - You need to import the SQLAlchemy class from this module. Step 3 - Now create a Flask application object and set the URI for the database to use. Step 4 - then use the application object as a parameter to create an object of class SQLAlchemy.

Is Flask-SQLAlchemy the same as SQLAlchemy?

Flask-SQLAlchemy is an extension for Flask that adds support for SQLAlchemy to your application. It aims to simplify using SQLAlchemy with Flask by providing useful defaults and extra helpers that make it easier to accomplish common tasks. See the SQLAlchemy documentation to learn how to work with the ORM in depth.


1 Answers

When you are adding a non-model-object into the session, you will be getting UnmappedInstanceError.

In your case, q was probably an unicode string, not a model object. (It appears that you are using Python 2.x because in Python 3.x, it will say str), this was the line of the root cause for UnmappedInstanceError: Class '__builtin__.unicode' is not mapped:

  File "C:\Users\Me\repos\mandj2\app\views.py", line 170, in add_manentry   db.session.add(q) 
like image 55
Devy Avatar answered Oct 03 '22 14:10

Devy