title: sqlalchemy.orm.exc.UnmappedInstanceError in flask
body: <p>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:</p>
  
  <pre><code>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
  </code></pre>
  
  <p>Here is the applicable code:</p>
  
  <pre><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'))
  </code></pre>