Problems getting sqlalchemy-migrate to add a new column

58 views
Skip to first unread message

Logick

unread,
Jul 6, 2011, 5:54:07 AM7/6/11
to migrate-users
using: sqlalchemy: 0.6.4 (I cannot upgrade easily)
sqlalchemy-migrate: 0.7.1 (use this patch also)
mysql: 5.0.77 (I cannot upgrade this)
python: 2.4(I cannot upgrade this)

I made a test DB

I created the following table just fine

from sqlalchemy import *
from migrate import *
from migrate.changeset import schema
meta = MetaData()

account = Table('account', meta,
Column('id', Integer(), primary_key=True, nullable=False),
Column('login', String(length=40, convert_unicode=False,
assert_unicode=None,unicode_error=None, _warn_on_bytestring=False)),
Column('passwd', String(length=40, convert_unicode=False,
assert_unicode=None, unicode_error=None,
_warn_on_bytestring=False)),)

def upgrade(migrate_engine):
meta.bind = migrate_engine
account.create()

def downgrade(migrate_engine):
meta.bind = migrate_engine
account.drop()

When I decide to add a column I decided to use the new
features(create_model, make_update_script_for_model, etc) since they
should work.

I make a model which looks like this:

from sqlalchemy import *
meta = MetaData()
account = Table('account', meta,
Column('id', Integer(), primary_key=True, nullable=False),
Column('login', String(length=None, convert_unicode=False,
assert_unicode=None, unicode_error=None, _warn_on_bytestring=False)),
Column('passwd', String(length=None, convert_unicode=False,
assert_unicode=None, unicode_error=None, _warn_on_bytestring=False)),
Column('newcol', String(length=None, convert_unicode=False,
assert_unicode=None, unicode_error=None, _warn_on_bytestring=False)),)

which I modified from the output of create_model, then I call

./manage.py make_update_script_for_model --model=oldmodel:meta --
oldmodel=model:meta

and it appears I get correct output:

from sqlalchemy import *
from migrate import *

from migrate.changeset import schema
meta = MetaData()
account = Table('account', meta,
Column('id', Integer(), primary_key=True, nullable=False),
Column('login', String(length=None, convert_unicode=False,
assert_unicode=None, unicode_error=None, _warn_on_bytestring=False)),
Column('passwd', String(length=None, convert_unicode=False,
assert_unicode=None, unicode_error=None, _warn_on_bytestring=False)),
)

def upgrade(migrate_engine):
# Upgrade operations go here. Don't create your own engine; bind
migrate_engine
# to your metadata
meta.bind = migrate_engine
account.columns['newcol'].create()

def downgrade(migrate_engine):
# Operations to reverse the above upgrade go here.
meta.bind = migrate_engine
account.columns['newcol'].drop()

but when I run the test I get this:

Upgrading...
Traceback (most recent call last):
File "./manage.py", line 3, in ?
main(url='mysql://login:password@localhost/test_DB',
debug='False', repository='.')
File "/usr/lib/python2.4/site-packages/sqlalchemy_migrate-0.7.1-
py2.4.egg/migrate/versioning/shell.py", line 207, in main
ret = command_func(**kwargs)
File "<string>", line 2, in test
File "/usr/lib/python2.4/site-packages/sqlalchemy_migrate-0.7.1-
py2.4.egg/migrate/versioning/util/__init__.py", line 159, in
with_engine
return f(*a, **kw)
File "/usr/lib/python2.4/site-packages/sqlalchemy_migrate-0.7.1-
py2.4.egg/migrate/versioning/api.py", line 219, in test
script.run(engine, 1)
File "/usr/lib/python2.4/site-packages/sqlalchemy_migrate-0.7.1-
py2.4.egg/migrate/versioning/script/py.py", line 145, in run
script_func(engine)
File "/mnt/dev-mahmud/DL/RedIndigo/res/test-migrate/my_respository/
002_migrate.py", line 16, in upgrade
account.columns['newcol'].create()
File "/usr/lib/python2.4/site-packages/SQLAlchemy-0.6.4-py2.4.egg/
sqlalchemy/util.py", line 778, in __getitem__
return self._data[key]
KeyError: 'newcol'

I noticed 'newcol' was missing from the initial table definition.
Adding it gives me the same error.

I have a better formatted version of this in stackoverflow
http://stackoverflow.com/questions/6594471/problems-getting-sql-alchemy-migrate-working-adding-a-column

Gabriel

unread,
Jul 6, 2011, 1:06:40 PM7/6/11
to migrate-users
Hi Logick,

Adding new columns was just fixed in the development version:
https://code.google.com/p/sqlalchemy-migrate/issues/detail?id=123
Checkout instructions are here:
https://code.google.com/p/sqlalchemy-migrate/source/checkout

The code generation features like make_update_script_for_model are
still
experimental however; I advise you to review the code they generate.
Reply all
Reply to author
Forward
0 new messages