title: SQLAlchemy inheritance not working
body: <p>I'm using Flask and SQLAlchemy. I have used my own abstract base class and inheritance. When I try to use my models in the python shell I get the following error:</p>
  
  <pre><code>&gt;&gt;&gt; from schedule.models import Task
  Traceback (most recent call last):
    File "&lt;console&gt;", line 1, in &lt;module&gt;
    File "/home/teelf/projects/schedule/server/schedule/models.py", line 14, in &lt;module&gt;
      class User(Base):
    File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/flask_sqlalchemy/__init__.py", line 536, in __init__
      DeclarativeMeta.__init__(self, name, bases, d)
    File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/sqlalchemy/ext/declarative/api.py", line 55, in __init__
      _as_declarative(cls, classname, cls.__dict__)
    File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/sqlalchemy/ext/declarative/base.py", line 254, in _as_declarative
      **table_kw)
    File "/home/teelf/projects/schedule/server/venv/lib/python3.4/site-packages/sqlalchemy/sql/schema.py", line 393, in __new__
      "existing Table object." % key)
  sqlalchemy.exc.InvalidRequestError: Table 'user' is already defined for this MetaData instance.  Specify 'extend_existing=True' to redefine options and columns
   on an existing Table object.
  </code></pre>
  
  <p>How do I fix this?</p>
  
  <p><strong>Code:</strong></p>
  
  <p><strong>manage.py</strong>:</p>
  
  <pre><code>#!/usr/bin/env python
  
  import os, sys
  
  sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
  
  from flask.ext.migrate import Migrate, MigrateCommand
  from flask.ext.script import Manager
  
  from server import create_app
  from database import db
  
  
  app = create_app("config")
  
  migrate = Migrate(app, db)
  manager = Manager(app)
  
  manager.add_command("db", MigrateCommand)
  
  if __name__ == "__main__":
      manager.run()
  </code></pre>
  
  <p><strong>__init__.py</strong>:</p>
  
  <pre><code>from flask import Flask
  
  from flask.ext.login import LoginManager
  
  from database import db
  from api import api
  from server.schedule.controllers import mod_schedule
  
  
  def create_app(config):
      # initialize Flask
      app = Flask(__name__)
  
      # load configuration file
      app.config.from_object(config)
  
      # initialize database
      db.init_app(app)
  
      api.init_app(app)
  
      # initialize flask-login
      login_manager = LoginManager(app)
  
      # register blueprints
      app.register_blueprint(mod_schedule)
  
      return app
  </code></pre>
  
  <p><strong>database.py</strong>:</p>
  
  <pre><code>from flask.ext.sqlalchemy import SQLAlchemy
  
  
  db = SQLAlchemy()
  </code></pre>
  
  <p><strong>models.py</strong>:</p>
  
  <pre><code>from sqlalchemy.dialects.postgresql import UUID
  
  from database import db
  
  
  class Base(db.Model):
      __abstract__ = True
  
      id = db.Column(UUID, primary_key=True)
  
  
  class User(Base):
      __tablename__ = "user"
  
      username = db.Column(db.String)
      password = db.Column(db.String)
      first_name = db.Column(db.String)
      last_name = db.Column(db.String)
      authenticated = db.Column(db.Boolean, default=False)
  
      def __init__(self, first_name, last_name, username):
          self.first_name = first_name
          self.last_name = last_name
          self.username = username
  
      def is_active(self):
          """ All users are active """
          return True
  
      def get_id(self):
          return self.username
  
      def is_authenticated(self):
          return self.authenticated
  
      def is_anonymous(self):
          """ Anonymous users are not supported"""
          return False
  </code></pre>
  
  <p><strong>controllers.py</strong>:</p>
  
  <pre><code>from flask import Blueprint
  
  from flask.ext.restful import reqparse, Resource
  
  from api import api
  from server.schedule.models import User
  
  
  mod_schedule = Blueprint("schedule",  __name__, url_prefix="/schedule")
  
  
  class Task(Resource):
      def put(self):
          pass
  
      def get(self):
          pass
  
      def delete(self):
          pass
  
  
  api.add_resource(Task, "/tasks/&lt;int:id&gt;", endpoint="task")
  </code></pre>