Django migrate ProgrammingError: syntax error at or near ""
Question:
I’m learning django (1.9.2) on a practice web site and a postgresql database with psycopg2.
I defined a model with a certain attribute “preview” and later deleted the attribute entirely. Despite having removed it, django seems to be referencing that old definition perhaps from a cache or something.
The makemigrations
command seems to work fine, reflecting every change that I make to the model definition, but once I run the migrate
command, then this error pops up.
(env) D:Web WorkspaceRat Race Websiteratrace>python manage.py migrate
Operations to perform:
Apply all migrations: contenttypes, news, polls, auth, sessions, admin
Running migrations:
Applying news.0003_auto_20160212_1209...Traceback (most recent call last):
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: syntax error at or near "9999999999999"
LINE 1: ...ER TABLE "news_news" ADD COLUMN "preview" varchar(9999999999...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gement__init__.py", line 353, in execute_from_command_line
utility.execute()
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gement__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gementbase.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gementbase.py", line 399, in execute
output = self.handle(*args, **options)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gementcommandsmigrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsexecutor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_ini
tial)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsexecutor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_
initial)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsexecutor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsmigration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, projec
t_state)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsoperationsfields.py", line 62, in database_forwards
field,
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsbaseschema.py", line 396, in add_field
self.execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsbaseschema.py", line 110, in execute
cursor.execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbutils.
py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangoutilssix
.py", line 685, in reraise
raise value.with_traceback(tb)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: syntax error at or near "9999999999999"
LINE 1: ...ER TABLE "news_news" ADD COLUMN "preview" varchar(9999999999...
The database tables are empty, so I suspect that deleting the database and making a new one might fix the issue for now, but I’d like a more concrete solution in case it happens again in the future where deleting the database is not an option.
Here’s what the model definition looks like.
from django.db import models
# Create your models here.
class News(models.Model):
headline = models.CharField(max_length=100)
content = models.CharField(max_length=100)
pub_date = models.DateTimeField('date published')
content_preview = models.CharField(max_length=100, blank=True)
thumbnail = models.ImageField(upload_to='thumbnails/%Y/%m/%d/', blank=True)
def __str__(self):
return self.headline
There’s no “preview” attribute anymore, yet django doesn’t seem to get that.
Edit:
Here’s the definition for the preview field
preview = CharField(max_length=9999999999999)
It produced an error saying it couldn’t be null, so I entered a one time default value "news preview"
. I assume the default value is for existing entries. At the time there were about 5 test entries.
Just read on another post that the quotes I used when entering the one time default value was the likely cause of the problem. Something about psycopg2 not liking quotes on values?… It was a string value, so I thought I needed quotes.
Anyways, so now that I’ve cleared out the preview field, how do I make django forget it was ever there?
Answers:
Going off the other comments and my own experience . . . when you get this error, go into your migrations folder and delete everything except the __init__.py
. You can even delete the __pycache__
folder. Then run makemigrations
and migrate
again. I think that should fix the problem.
This can also happen when making a CharField nullable if you do not specify max_length.
So the solution is to specify max_length in your model, then remove and remake the problematic migration..
This was described as a bug here.
This is old, but I will answer anyway.
The problem is that you made a "makemigrations" with a mistake in your model and that was catalogued, I will assume you corrected the mistake, that catalogue is not deleted, instead it was aggregated when you tried Migration.
What you need to do is delete everything in your migration folder except init, that should clear that up, if it doesn’t then you still have a mistake in your Model
I’m learning django (1.9.2) on a practice web site and a postgresql database with psycopg2.
I defined a model with a certain attribute “preview” and later deleted the attribute entirely. Despite having removed it, django seems to be referencing that old definition perhaps from a cache or something.
The makemigrations
command seems to work fine, reflecting every change that I make to the model definition, but once I run the migrate
command, then this error pops up.
(env) D:Web WorkspaceRat Race Websiteratrace>python manage.py migrate
Operations to perform:
Apply all migrations: contenttypes, news, polls, auth, sessions, admin
Running migrations:
Applying news.0003_auto_20160212_1209...Traceback (most recent call last):
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 64, in execute
return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: syntax error at or near "9999999999999"
LINE 1: ...ER TABLE "news_news" ADD COLUMN "preview" varchar(9999999999...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gement__init__.py", line 353, in execute_from_command_line
utility.execute()
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gement__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gementbase.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gementbase.py", line 399, in execute
output = self.handle(*args, **options)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangocoremana
gementcommandsmigrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsexecutor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_ini
tial)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsexecutor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_
initial)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsexecutor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsmigration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, projec
t_state)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbmigrat
ionsoperationsfields.py", line 62, in database_forwards
field,
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsbaseschema.py", line 396, in add_field
self.execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsbaseschema.py", line 110, in execute
cursor.execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbutils.
py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangoutilssix
.py", line 685, in reraise
raise value.with_traceback(tb)
File "D:Web WorkspaceRat Race Websiteenvlibsite-packagesdjangodbbacken
dsutils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: syntax error at or near "9999999999999"
LINE 1: ...ER TABLE "news_news" ADD COLUMN "preview" varchar(9999999999...
The database tables are empty, so I suspect that deleting the database and making a new one might fix the issue for now, but I’d like a more concrete solution in case it happens again in the future where deleting the database is not an option.
Here’s what the model definition looks like.
from django.db import models
# Create your models here.
class News(models.Model):
headline = models.CharField(max_length=100)
content = models.CharField(max_length=100)
pub_date = models.DateTimeField('date published')
content_preview = models.CharField(max_length=100, blank=True)
thumbnail = models.ImageField(upload_to='thumbnails/%Y/%m/%d/', blank=True)
def __str__(self):
return self.headline
There’s no “preview” attribute anymore, yet django doesn’t seem to get that.
Edit:
Here’s the definition for the preview field
preview = CharField(max_length=9999999999999)
It produced an error saying it couldn’t be null, so I entered a one time default value "news preview"
. I assume the default value is for existing entries. At the time there were about 5 test entries.
Just read on another post that the quotes I used when entering the one time default value was the likely cause of the problem. Something about psycopg2 not liking quotes on values?… It was a string value, so I thought I needed quotes.
Anyways, so now that I’ve cleared out the preview field, how do I make django forget it was ever there?
Going off the other comments and my own experience . . . when you get this error, go into your migrations folder and delete everything except the __init__.py
. You can even delete the __pycache__
folder. Then run makemigrations
and migrate
again. I think that should fix the problem.
This can also happen when making a CharField nullable if you do not specify max_length.
So the solution is to specify max_length in your model, then remove and remake the problematic migration..
This was described as a bug here.
This is old, but I will answer anyway.
The problem is that you made a "makemigrations" with a mistake in your model and that was catalogued, I will assume you corrected the mistake, that catalogue is not deleted, instead it was aggregated when you tried Migration.
What you need to do is delete everything in your migration folder except init, that should clear that up, if it doesn’t then you still have a mistake in your Model