title: Alembic - sqlalchemy initial migration
body: <p>I am having a problem creating an initial migration which would automatically have tables that I've defined in my models.py by using shared Base (declarative_base).</p>
  
  <p>When I enter a command:</p>
  
  <pre><code>alembic revision --autogenerate
  </code></pre>
  
  <p>alembic creates an empty file.</p>
  
  <p>What's wrong in my configs or my approach?</p>
  
  <p>project.base.py:</p>
  
  <pre><code>from sqlalchemy.ext.declarative import declarative_base
  
  
  Base = declarative_base()
  </code></pre>
  
  <p>env.py:</p>
  
  <pre><code>import sys
  import os
  
  sys.path.append(os.path.abspath(os.getcwd()))
  from alembic import context
  from sqlalchemy import engine_from_config, pool
  from logging.config import fileConfig
  
  from project.base import Base
  target_metadata = Base.metadata
  def run_migrations_online():
      """Run migrations in 'online' mode.
  
      In this scenario we need to create an Engine
      and associate a connection with the context.
  
      """
      engine = engine_from_config(
          config.get_section(config.config_ini_section),
          prefix='sqlalchemy.',
          poolclass=pool.NullPool)
  
      connection = engine.connect()
      context.configure(
          connection=connection,
          target_metadata=target_metadata
      )
  
      # target_metadata.reflect(engine, only=[
      #     "django_migrations",
      #     "auth_group_permissions",
      #     "django_session",
      #     "auth_user_user_permissions",
      #     "auth_user_groups",
      #     "django_admin_log",
      #     "auth_permission",
      #     "auth_user",
      #     "sysdiagrams",
      #     "django_content_type",
      #     "auth_group",
      #     "sysdiagrams",
      # ])
  
      try:
          with context.begin_transaction():
              context.run_migrations()
      finally:
          connection.close()
  
  
  if context.is_offline_mode():
      run_migrations_offline()
  else:
      run_migrations_online()
  </code></pre>
  
  <p>Sample model:</p>
  
  <pre><code># -*- coding: utf-8 -*-
  
  from sqlalchemy import Column, Integer, String, DateTime, Boolean, ForeignKey, SmallInteger
  from sqlalchemy.orm import relationship, backref
  from project.base import Base
  
  
  __schema__ = "Users"
  
  
  class User(Base):
      __tablename__ = "User"
      __table_args__ = {'schema': __schema__}
  
      USER_CUSTOMER = 0
      USER_EMPLOYEE = 5
      USER_ADMIN = 10
  
      USER_TYPES = (
          (USER_CUSTOMER, u'Klient'),
          (USER_EMPLOYEE, u'Obsługa sklepu'),
          (USER_ADMIN, u'Administrator')
      )
  
      id = Column(Integer, primary_key=True)
      name = Column(String(255))
      email = Column(String(255))
      password = Column(String)
      date_created = Column(DateTime)
      date_updated = Column(DateTime)
      user_type = Column(SmallInteger)
  
      is_active = Column(Boolean)
  
      def __repr__(self):
          return u"&lt;User: ({} {})&gt;".format(self.id, self.name)
  
      def is_management(self):
          return self.user_type in [self.USER_EMPLOYEE, self.USER_ADMIN]
  
      def is_admin(self):
          return self.user_type == self.USER_ADMIN
  </code></pre>
  
  <p>Edit:</p>
  
  <p>I've discovered  that <code>Base.metadata.sorted_tables</code> is empty.</p>