sqlalchemy-migrate/docs/changeset.rst
2009-01-25 12:50:24 +00:00

3.0 KiB

Database changeset API

migrate.changeset

Importing migrate.changeset adds some new methods to existing SA objects, as well as creating functions of its own. Most operations can be done either by a method or a function. Methods match SQLAlchemy's existing API and are more intuitive when the object is available; functions allow one to make changes when only the name of an object is available (for example, adding a column to a table in the database without having to load that table into Python).

Changeset operations can be used independently of SQLAlchemy Migrate's versioning <versioning-system>.

For more information, see the generated documentation for migrate.changeset.

Column

Given a standard SQLAlchemy table:

table = Table('mytable',meta,
   Column('id',Integer,primary_key=True),
)
table.create()

Create a column:

col = Column('col1',String)
col.create(table)

# Column is added to table based on its name
assert col is table.c.col1

Drop a column (Not supported by SQLite):

col.drop()

Alter a column (Not supported by SQLite):

col.alter(name='col2')

# Renaming a column affects how it's accessed by the table object
assert col is table.c.col2

# Other properties can be modified as well
col.alter(type=String(42),
    default="life, the universe, and everything",
    nullable=False,
)

# Given another column object, col1.alter(col2), col1 will be changed to match col2
col.alter(Column('col3',String(77),nullable=True))
assert col.nullable
assert table.c.col3 is col

Table

SQLAlchemy supports table create/drop

Rename a table:

table.rename('newtablename')

Index

SQLAlchemy supports index create/drop

Rename an index, given an SQLAlchemy Index object:

index.rename('newindexname')

Constraint

SQLAlchemy supports creating/dropping constraints at the same time a table is created/dropped. SQLAlchemy Migrate adds support for creating/dropping primary/foreign key constraints independently.

Primary key constraints:

cons = PrimaryKeyConstraint(col1,col2)
# Create the constraint
cons.create()
# Drop the constraint
cons.drop()

Note that Oracle requires that you state the name of the primary key constraint to be created/dropped. SQLAlchemy Migrate will try to guess the name of the PK constraint for other databases, but if it's something other than the default, you'll need to give its name:

PrimaryKeyConstraint(col1,col2,name='my_pk_constraint')

Foreign key constraints:

cons = ForeignKeyConstraint([table.c.fkey], [othertable.c.id])
# Create the constraint
cons.create()
# Drop the constraint
cons.drop()

Names are specified just as with primary key constraints:

ForeignKeyConstraint([table.c.fkey], [othertable.c.id],name='my_fk_constraint')