Version 2 (modified by guest, 4 years ago)

using global options for metadata and autosetup, added note about table names

Simple example about how to use Elixir defined entities with SQLAlchemy Schema Migration Tools.

With autosetup=True

from sqlalchemy import *
from migrate import *
from elixir import *

__metadata__ = MetaData(migrate_engine)
options_defaults["autosetup"] = True


class Foo(Entity):
    using_options(tablename='foo')
    

def upgrade():
    # Upgrade operations go here. Don't create your own engine; use the engine
    # named 'migrate_engine' imported from migrate.
    Foo.table.create()
def downgrade():
    # Operations to reverse the above upgrade go here.
    Foo.table.drop()

With setup_all()

from sqlalchemy import *
from migrate import *
from elixir import *

__metadata__ = MetaData(migrate_engine)


class Foo(Entity):
    using_options(tablename='foo')

setup_all()
    

def upgrade():
    # Upgrade operations go here. Don't create your own engine; use the engine
    # named 'migrate_engine' imported from migrate.
    Foo.table.create()
def downgrade():
    # Operations to reverse the above upgrade go here.
    Foo.table.drop()

Note that it is not recommended to use your model object since in migrate scripts they are subject to change, more about it here.

If you don't specify your tables names, you have to use shortnames=True or specify a tablename rule:

options_defaults["tablename"] = lambda cls: "my_prefix_%s" % cls.__name__.lower()