I have the following migrate script mainly for renaming a column --
"""
from sqlalchemy import *
from migrate import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
user_id = Column(Unicode(32), primary_key=True) # UUID 32 hex
full_name = Column(Unicode(128), index=True) # !
display_name = Column(Unicode(32), index=True) # !
def upgrade(migrate_engine):
Base.metadata.bind = migrate_engine
Base.metadata.tables[User.__tablename__].c.full_name.alter(
name='display_name', type=Unicode(32))
def downgrade(migrate_engine):
Base.metadata.bind = migrate_engine
alter_column(display_name,
table=Base.metadata.tables[User.__tablename__],
name='full_name', type=Unicode(128))
"""
The upgrade works fine, however, I couldn't for my life figure out how
to make the downgrade work because by the time it runs, the column
already bears the new name, which prevents me from using
table.c.full_name.alter(...)
Exception --
File "/home/jerryj/virtualenv/lib/python2.6/site-packages/
SQLAlchemy-0.6.5-py2.6.egg/sqlalchemy/sql/compiler.py", line 1529, in
_requires_quotes
lc_value = value.lower()
AttributeError: 'NoneType' object has no attribute 'lower'
More trace back at
http://pastebin.com/4NJVqmMz
Any tip will be much appreciated!
Jerry