In trying to add a new field to a preexisting Model/table, I get a DatabaseError with 'table already exists.' I have run migrations before this one so I am a bit puzzled why adding a new field would pop up this error.
Commands executed:
python manage.py schemamigration app --auto
python manage.py migrate app
Previous SO questions like this were answered with faking a migration.
python manage.py migrate app --fake
python manage.py migrate app
The problem that arises from this is that the column is not created. So when you runserver, you will see a DatabaseError 'no such column'.
As far as my model, I am only adding a CharField.
Thanks in advance for your help-
This happens when you doing something on migration and did not let south knows about it.
If you looking at the south_* table in the database, you will find-out south keeps logs about db migrations in the database. The common way is to faking the migration. There is a
fake
argument for the South.here you can find out what is all about: http://south.readthedocs.org/en/latest/commands.html#options
You need to do
schemamigration app --initial
first without your new field, thenmigrate app --fake 0001
(or whichever migration number it returned) to set the south database to that state (tables already created).Add your new field, then run
schemamigration myapp --auto
, then migrate.I commented out the field, ran schemamigration, then migrate. Uncommented out the field, ran schemamigration, then migrate and it worked. Not sure what I was doing wrong.