django: by mistake deleted migration files from production server - python

By mistake I deleted all the migration files from all apps on production server.
Now running python manage.py makemigrations and then python manage.py migrate raises:
"field already exists in the database"
error for each field, What should I do ?
django version: 1.7.7

If you already migrated and then deleted.Then fake will help you
python manage.py migrate --fake

you have to fake the migration, the next command may help you:
python manage.py migrate 'name_app' 'name_migration' --fake
Example:
python manage.py migrate books 005_auto_20150505 --fake

Related

Django: no migrations apply, but I have unapplied migrations

I deleted my database and tried to create a new one.
I did:
python manage.py makemigrations
python manage.py migrate
Then I ran python manage.py runserver and it returned
You have 2 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): social_django.
Run 'python manage.py migrate' to apply them.
Then I ran python manage.py migrate and it returned
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, social_django
Running migrations:
No migrations to apply.
I am using django 3.0.7 and social-auth-app-django 4.0.0
The solution was to disable the environment.
I don't know why.
You can check to see which migrations have been done by viewing your database with whichever program you use to do that. And checking the django_migrations table.
The migrations that need to be applied will still be in the migrations folders for the apps that haven't been updated.
To get them migrated, assuming they're still in your installed_apps in your settings.py, simply delete the migrations (probably __init__.py) from the migrations folders and re-run :
> python manage.py makemigrations
> python manage.py migrate
run the following command on your command prompt:
1.python manage.py migrate
2.python manage.py runserver

south.exceptions.NoMigration – djcelery

I just added a many-to-many relationship to my model and generated the new migration file:
py manage.py schemamigration myapp --auto
Then tried running the migration:
py manage.py migrate myapp
It did not complete successfully, raising a south.exceptions.NoMigrations exception:
south.exceptions.NoMigrations: Application '<module 'djcelery' from 'C:\Python27\lib\site-packages\djcelery\__init__.pyc'>' has no migrations.
No more information is given, and I cannot figure out what might be wrong. Has anybody experienced this issue before?
I am using Python 2.7 and Django 1.4.22.

From Django1.7 onwards `migration` is into the core. Is it similar to `south`?

I am using south for migrations. Today I surprisingly found an interesting article, django1.7 support migrations.
Interestingly I found that the startapp command even creates a folder migrations.
python manage.py startapp myapp
has tree:
myapp/
admin.py
models.py
views.py
tests.py
migrations/ <-- folder migrations
I also found command ./manage.py makemigrations, is it similar to:
./manage.py schemamigration myapp --initial or ./manage.py schemamigration myapp --auto
So what about datamigration??
Also found command ./manage.py migrate, i hope it is similar to south's ./manage.py migrate command.
So there is no ./manage.py syncdb command in django1.7??
Django 1.7 migrations are successor to South migrations.
And since there are now migrations old syncdb was deprecated. Syncdb should be working still for few versions.
You can read more details what was changed in 1.7 release notes:

Add field to existing django app in production environment

I have an existing django app and would like to add a field to a model.
But because the website is already in production, just deleting the database is not an option any more.
These are the steps I took:
pip install south
added 'south' to INSTALLED_APPS
python manage.py syncdb
python manage.py convert_to_south [myapp]
So now I have the initial migration and south will recognize the changes. Then I added the field to my model and ran:
python manage.py schemamigration [myapp] --auto
python manage.py migrate [myapp]
Now I have the following migrations:
0001_initial.py
0002_auto__add_field_myapp_fieldname.py
Which commands should I run on my production server now to migrate? Also should I install south first and then pull the code changes and migrations?
first is to fake the initial migration:
python manage.py migrate [yourapp] --fake 0001
then you can apply the migration to the db
python manage.py migrate [yourapp]
I'm assuming you ran convert_to_south on development, in which case production still wouldn't be aware of the migrations yet. convert_to_south automatically fakes the initial migration for you! If you were to just run migrate on production without faking, it should error.

Unable to migrate Django app with South on Heroku

I've installed South on my existing Django app. This Django app is on Heroku as well.
Without making any changes to the models, I've done the following commands locally:
manage.py schemamigration app_name --initial
manage.py migrate --fake
Then I attempted to push heroku master, and migrate there. But I receive the following:
Running migrations for app_name:
- Nothing to migrate.
- Loading initial data for notecards.
No fixtures found
I get the same message if I try to fake the Heroku migrate.
I figured, this may be ok since technically there is nothing to migrate as the db stays the same.
So I made a small change to one of the models and did the following:
manage.py schemamigration app_name --auto
manage.py migrate
I then pushed to Heroku and attempted to migrate there, and I still receive the following:
Running migrations for app_name:
- Nothing to migrate.
- Loading initial data for notecards.
No fixtures found
Any help with what I'm doing wrong would be great. THanks.
For anyone else who comes across this issue, and for my own reference. Thanks to Chris Pratt for putting me on the right track.
This was resolved by:
Locally:
recursively removing any old migrations git rm -r migrations
flushing old database (this removes all data, but for me this wasnt an issue) manage.py flush
delete migrations folder in app folder
run initial schemamigration manage.py schemamigration --initial
run fake migrate manage.py migrate --fake
push heroku master
On Heroku:
migrate heroku run python manage.py migrate app_name
Then, locally, you can run migrate --auto, push to heroku, and run migrate app_name

Categories

Resources