Django: "python manage.py migrate" takes hours (and other weird behavior)

I made some changes to one of my tables in models.py and tried to migrate using "python manage.py migrate", and it took several hours. I just changed the names of the three field names (columns) and it worked for more than 2 hours. It went smoothly (I think) for several minutes when I created the table earlier this morning. The start of the season is a model in which changes have been made.

Here is what models.py looks like now:

from django.db import models from django.contrib.gis.db import models as gismodels # from django.contrib.gis import admin # Create your models here. class Location(models.Model): # table name automatically chirps_location locationID = models.IntegerField(default=0, primary_key=True) lat = models.FloatField(default=0.0) lon = models.FloatField(default=0.0) geom = gismodels.PointField(null=True) objects = gismodels.GeoManager() def __unicode__(self): return u"LocationID: " + unicode(self.locationID) # admin.site.unregister(Location) # admin.site.register(Location, admin.OSMGeoAdmin) class Rainfall(models.Model): location = models.ForeignKey(Location) year = models.IntegerField(default=0) pentad_num = models.IntegerField(default=0) pentad_val = models.FloatField(default=0.0) class Meta: ordering = ['location', 'year', 'pentad_num'] def __unicode__(self): return u"LocationID: " + unicode(self.location.locationID) + u" Year: " + unicode(self.year) + u" Pentad: " + unicode(self.pentad_num) class Start_of_Season(models.Model): location = models.ForeignKey(Location) crop = models.CharField(default='', max_length=40) year = models.IntegerField(default=0) first_rain = models.IntegerField(default=0) onset_rain = models.IntegerField(default=0) start_season = models.IntegerField(default=0) class Meta: ordering = ['location', 'crop', 'year'] def __unicode__(self): return u"LocationID: " + unicode(self.location.locationID) + u" Year: " + unicode(self.year) + u" Start of Season pentad: " + unicode(self.start_season) 

There was also some kind of strange behavior that I could not explain before this happened, so I will give a brief summary of all this if it is all connected.

At first, my Start_of_Season class looked like this (note that the only difference is the names of the last 3 fields):

 class Start_of_Season(models.Model): location = models.ForeignKey(Location) crop = models.CharField(default='', max_length=40) year = models.IntegerField(default=0) first_rain_pentad = models.IntegerField(default=0) onset_rain_pentad = models.IntegerField(default=0) start_season_pentad = models.IntegerField(default=0) class Meta: ordering = ['location', 'crop', 'year'] def __unicode__(self): return u"LocationID: " + unicode(self.location.locationID) + u" Year: " + unicode(self.year) + u" Start of Season pentad: " + unicode(self.start_season) 

Migration:

 python manage.py makemigrations python manage.py migrate 

appeared smoothly.

But when I ran the python script (excerpt) to add rows to this newly created Start_of_Season table:

 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "access.settings") from chirps.models import Location, Rainfall, Start_of_Season django.setup() try: with transaction.atomic(): for loc in Location.objects.all(): locID = loc.locationID for yr in range(1981, 2014): # some computations to find: c1, c2, c3 start_of_season = Start_of_Season() start_of_season.location = Location.objects.get(locationID = locID) start_of_season.crop = 'millet' start_of_season.year = yr start_of_season.first_rain_pentad = c1 start_of_season.onset_rain_pentad = c2 start_of_season.start_season_pentad = c3 start_of_season.save() 

At first, rows were never added to the database (at least in psql). Then I got the error message "start_of_season does not have a start_season attribute", which is strange because I never tried to access this attribute in my script, only "start_of_season.start_season_pentad"

So then I thought, well, I will change the names of the fields so that this attribute has start_of_season . . And this is when I edited models.py to look like an excerpt at the top of the post.

After updating the update models.py,

 python manage.py makemigrations 

works without errors:

 (access_mw) mwooten@ip-10-159-67-226 :~/dev/access$ python manage.py makemigrations Did you rename start_of_season.first_rain_pentad to start_of_season.first_rain (a IntegerField)? [y/N] y Did you rename start_of_season.onset_rain_pentad to start_of_season.onset_rain (a IntegerField)? [y/N] y Did you rename start_of_season.start_season_pentad to start_of_season.start_season (a IntegerField)? [y/N] y Migrations for 'chirps': 0010_auto_20150901_1454.py: - Rename field first_rain_pentad on start_of_season to first_rain - Rename field onset_rain_pentad on start_of_season to onset_rain - Rename field start_season_pentad on start_of_season to start_season 

but:

 python manage.py migrate 

stuck here for hours:

 (access_mw) mwooten@ip-10-159-67-226 :~/dev/access$ python manage.py migrate Operations to perform: Synchronize unmigrated apps: staticfiles, gis, djgeojson, messages, leaflet Apply all migrations: admin, chirps, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying chirps.0010_auto_20150901_1454... 

I do not understand why this should take so long, because, as it did not create the actual table, it is not. I am also not sure why I am getting other errors. Any ideas on what's going on?

thanks

+5
source share
1 answer

Most often this happens because the table you are trying to modify has another SQL client or django server or shell read / write.

The SQL command that modifies the schema cannot be successfully executed while accessing the table. Ideally, an error message should appear, but what usually happens is that the team simply waits for the rest to complete.

Once you close all open shells and sql clients, a schema change can occur. In the worst case, you may need to temporarily disable the site.

+5
source

All Articles