3.1 KiB
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
SA'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 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')