I am trying to migrate a model that has nothing to do with this and as soon as I do migrate it gives me this error:
NoMigrations: Application '<module 'django.contrib.comments' from C:\Python27\lib\site-packages\django\contrib\comments\__init__.pyc' has no migrations.
I have tried deleting migrations folder and deleting databases but keeps coming up.
It can be that you have another app named as the last part of the module in this case 'comments' or you have an entry in the database table south_migrationhistory with app_name same as the module.
Found answer here Google Groups
i suggest if you can use django dumpdata , you will get a json file copy of your model.
$ python manage.py dumpdata <app-name> --indent=2
or create a folder to put the result in
$ python manage.py dumpdata <app-name> --indent=2 > [project]/[app]/[folder]/file-name.json
later you can use data upload to rebuild the original model.
Related
In django, I have attempted to switch from using an sqlite3 database to postgresql. settings.py has been switched to connect to postgres. Both python manage.py makemigrations and python manage.py migrate run without errors. makemigrations says that it creates the models for the database, however when running migrate, it says there is no changes to be made.
The django server will run, however when clicking on a specfic table in the database in the /admin webpage, it throws the error:
ProgrammingError at /admin/app/tablename/
relation "app_tablename" does not exist
LINE 1: SELECT COUNT(*) AS "__count" FROM "app_tablename"
With the same code (other than settings.py database connection) this worked when using sqlite3.
Happened same thing to me. i deleted the table from database then created the migration again using python manage.py makemigrations . Then i ran that particular migration again using python manage.py migrate myapp 00123 assuming that appname is myapp and migration name is 00123.py
What I did was create a new database and switched to it through the settings.py file. After that, migrations should happen with no problems
I am trying to do a migration in django 2.2.4 in python 3.7.
First I try to make do makemigations:
python3 manage.py makemigrations
I get:
Migrations for 'main':
main/migrations/0001_initial.py
- Create model TutorialCategory
- Create model TutorialSeries
- Create model Tutorial
But then I try the second step:
python3 manage.py migrate
I get:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, main, sessions
Running migrations:
No migrations to apply.
Even though a migration should happen.
I tried deleting my migrations folder and then remaking it (with the empty __init__.py file inside) but it still doesn't work.
(Note: I have been following along the tutorial: Linking models with Foreign Keys - Django Web Development with Python p.9 by sentdex)
I faced the same problem in django 2.2, The following worked for me...
delete the migrations folder resided inside the app folder
delete the pycache folder too
restart the server [if your server is on and you are working from another cli]
python manage.py makemigrations <app_name> zero
python manage.py makemigrations <app_name> [explicit app_name is important]
python manage.py migrate
Somehow your migrations are virtually or faked applied in the database, Truncating django_migrations table should work.
Delete all the migrations files:
find . -path "/migrations/.py" -not -name "init.py" -delete
find . -path "/migrations/.pyc" -delete
Truncate table:
truncate django_migrations
makemigrations, migrate.
w/in the app directory I deleted the pycache and migrations folders,
from django.migrations tables I deleted all rows like this for PostgreSQL
DELETE FROM public.django_migrations
WHERE public.django_migrations.app = 'target_app_name';
To delete any app tables already created for the tables to be created from scratch.
Mine didn't migrate cause there was already a record in the django_migrations table with the same name, so I just removed it and then migrate worked.
So I'm trying to run the initial migrations on a django app and when I try to run the migrate command (python manage.py migrate or makemigrations) I get the following error:
psycopg2.ProgrammingError: relation "dotworks_server_internship" does not exist
LINE 1: ...s", "dotworks_server_internship"."questions" FROM "dotworks_...
^
I'm on a Windows environment using Django 1.9.6 and my database is postgres. Plus, I'm using PGAdmin to manage my database.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'dotworks',
'USER': 'postgres',
'PASSWORD': 'mypasswordgoeshere',
'HOST': 'localhost',
'PORT': '5432',
}
}
I had this problem and I had to comment out everything in urls.py that referenced views.py, then run makemigrations. Hope this helps.
Make sure that you don't have any class variables in your code that are calling Django manager
For example:
class SomeViewSet(viewsets.ViewSet):
se = SomeEntity.objects.first() # fetching some entity on the class level
def list(self, request):
# the rest of the code
So, when you try to create/apply migrations, this variable will also try to initialise, and will try to access SomeEntity, but at that moment that entity doesn't even exist, and the error occurs.
If all other solutions mentioned fail, if you are still in development probably the easiest solution is dropping the database (in pgAdmin 4 2.0, right-click on database) and then run makemigrations and migrate.
Try to migrate particular app using following process. Refer Django migrations
python manage.py makemigrations
Initial migration created then run migrate command with app name
python manage.py migrate appname1, appname2
When you run a query before applying migrations this error appears.
If you got this error during python manage.py makemigrations or python manage.py migrate you must consider that makemigrations and migrate commands run after successful django bootstrap! So this error happens when you run a query during django bootstrap! So you must find the place you run this query during bootstrap progress.
For example, during bootstrap, django reads root {project}/urls.py and its nested imports. If you use views or viewsets in urls.py and they are run a query during initializing (in their __init__ method or __init__.pyfile or somewhere etc.), it happens!
In this situation and similars, you must comment out any entry in urls.py and similar files which cause running a query during bootstrap and prevent them from running by raising of exception during bootstrap! makemigrations and migrate need successful bootstrap to be run!
If your commented out code needs to makemigrations and migrate handcooks :D, it needs to be patient and be silent for a cycle or a while ;), and after a successful migrations it could be active and verbose ;D.
Your app is trying to call some DB entries that does not exist.
If you are trying to migrate it to a new database, one of your options is to export a dump of old database and import it to your new DB.
For example in PostgreSQL, import the database using below command then migration will work!
sudo -u postgres -i psql mydb < mydb-export.sql
If you're running in local,
For each Django app (maybe you have only one), erase the content of the migrations folder.
Then, run python manage.py makemigrations app1 app2 app3 (if you have 3 Django apps named app1, app2, app3). This will (re)create the migrations files required to migrate your database
Then, run python manage.py migrate. It will apply the migration files you just created.
This error may have related to previous database error.so if you created new database and you also face that type of error ,you can simply run the command with the app name:
1)python manage.py makemigrations <"app name">
2)python manage.py migrate <"app name">
I've solved this error with this solution.
first remove all url in urls.py .
create simple function view for viewing nothing.
def simple(request):
context = {}
return render(request, 'base.html', context)
and add url to urs.py
do migrate
python manage.py migrate
after migrate,
recover the deleted urls.py contents
:)
For me the error came from some initialization code I put into the app.ready() method. Commenting that part of code allowed me to run the command makemigrations without any issue.
I believe app.ready is called at some point by manage.py even for the makemigrations command, which caused my code to query my database before any migration.
I found the problematic code thanks to the traceback.
I am trying to upgrade from Django 1.6.7 to Django 1.7.1, so I have been trying to migrate my app.
I have followed the django docs here.
I deleted the south from my installed apps.
In the migration directory, I delete the numbered migration files and the .pyc files but I kept the directory & __ init__.py file.
I then run :
python manage.py makemigrations your_app_name
I receive the following confirmation message:
Migrations for 'your_app_name':
0001_initial.py:
- Create model UserProfile
Next I run:
python manage.py migrate your_app_name
I received the following error:
CommandError: App 'your_app_name' does not have migrations (you cannot selectively sync unmigrated apps)
As per the docs, I also ran:
python manage.py migrate --fake your_app_name
I received the same error message:
CommandError: App 'your_app_name' does not have migrations (you cannot selectively sync unmigrated apps)
Can anyone shed some light on why this will not work for me?
I noticed that only those apps that actually contain a migrations folder that contain a file __init__.py are recognized by migrations. IE having only models.py in your app is not enough.
If you have a single app, running migrate without specifying the app or migration may work.
If so, the first thing to check is that your app name matched that specified in your settings.py under INSTALLED_APPS.
As pointed out in the comments, app names can be in the form [parent_app].[app_name]. In this case, migrate needs [app_name] only.
Your app must contain a models.py file (even emtpy).
Source: https://groups.google.com/forum/#!msg/django-users/bsTZEmxgDJM/wH0p3xinBWIJ
Just to mention another possible reason:
In my Django app i added the correct migrations and installed the app with pip and got the same error.
What i was missing is a correct MANIFEST.in file
Also the parameter include_package_data in setup() from the setup.py file was not set to True.
First, I create my database.
create database mydb;
I add "south" to installed Apps. Then, I go to this tutorial: http://south.aeracode.org/docs/tutorial/part1.html
The tutorial tells me to do this:
$ py manage.py schemamigration wall --initial
>>> Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate wall
Great, now I migrate.
$ py manage.py migrate wall
But it gives me this error...
django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")
So I use Google (which never works. hence my 870 questions asked on Stackoverflow), and I get this page: http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c
Alright, so I follow that instructions
>> Drop database mydb;
>> Create database mydb;
$ rm -rf ./wall/migrations
$ py manage.py syncdb
But when I run syncdb, Django creates a bunch of tables. Yes, it creates the south_migrationhistory table, but it also creates my app's tables.
Synced:
> django.contrib.admin
> django.contrib.auth
> django.contrib.contenttypes
> django.contrib.sessions
> django.contrib.sites
> django.contrib.messages
> south
> fable.notification
> pagination
> timezones
> fable.wall
> mediasync
> staticfiles
> debug_toolbar
Not synced (use migrations):
-
(use ./manage.py migrate to migrate these)
Cool....now it tells me to migrate these. So, I do this:
$ py manage.py migrate wall
The app 'wall' does not appear to use migrations.
Alright, so fine. I'll add wall to initial migrations.
$ py manage.py schemamigration wall --initial
Then I migrate:
$ py manage.py migrate wall
You know what? It gives me this BS:
_mysql_exceptions.OperationalError: (1050, "Table 'wall_content' already exists")
Sorry, this is really pissing me off. Can someone help ? thanks.
How do I get South to work and sync correctly with everything? The only thing I can think of is remove my app from INSTALLED_APPS, then run syncdb, then add it back on.
That is SO SILLY.
South allows you to create migrations when you first start out with a new app and the tables haven't been added to the database yet, as well as creating migrations for legacy apps that already have tables in the database. The key is to know when to do what.
Your first mistake was when you deleted your migrations, as soon as you did that, and then ran syncdb, Django didn't know that you wanted south to manage that app anymore, so it created the tables for you. When you created your initial migrations and then ran migrate, south was trying to create tables that django already created, and thus your error.
At this point you have two options.
Delete the tables for the wall app from your database and then run $ py manage.py migrate wall This will run the migration and create your tables.
Fake out the initial migration run
$ py manage.py migrate wall 0001 --fake This will tell south that you already have the tables on the database so just fake it, which will add a row to the south_migrationhistory table, so that the next time you run a migrate it will know that the first migration has already been run.
Setting up a brand new project and no database
create your database
add south to installed apps
run syncdb, this will add the django and south tables to the database
add your apps
for each app run python manage.py schemamigration app_name --initial this will create the initial migration files for your app
then run south migrate python manage.py migrate app_name this will add the tables to the database.
Setting up a legacy project and database
add south to installed apps
run syncdb, this will add the south tables to the database
for each of your apps run python manage.py schemamigration app_name --initial This will create your initial migrations
for each of your apps run python manage.py migrate app_name 0001 --fake , this will fake out south, it won't do anything to the database for those models, it will just add records to the south_migrationhistory table so that the next time you want to create a migration, you are all set.
Setting up a legacy project and no database
create database
add south to installed apps
for each of your apps run python manage.py schemamigration app_name --initial This will create your initial migrations
run syncdb, this will add any apps that don't have migrations to the database.
then run south migrate python manage.py migrate this will run all migrations for your apps.
Now that you are setup with south, you can start using south to manage model changes to those apps. The most common command to run is python manage.py schemamigration app_name migration_name --auto that will look at the last migration you ran and it will find the changes and build out a migration file for you. Then you just need to run python manage.py migrate and it alter your database for you.
This is how I get things working.
pip install South
# add 'south', to INSTALL_APPS, then
python manage.py syncdb
# For existing project + database
python manage.py convert_to_south app_name
# Thereafter, call them per model changes
python manage.py schemamigration app_name --auto
python manage.py migrate app_name
References:
http://garmoncheg.blogspot.com/2011/08/django-how-and-why-to-use-migrations.html
http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/
The tutorial you're using states:
(If this fails complaining that
south_migrationhistory does not exist,
you forgot to run syncdb after you
installed
South.)
Assuming that your post accurately details the steps you've taken, following that link seems to show that you missed a step before setting up your new app. As you are following a tutorial for setting up migrations on a new application, the order is:
Add south to INSTALLED_APPS.
Run syncdb.
Then follow the tutorial.
I.e., you should've already run syncdb before you added in the models for your new app. Your solution of removing your app from INSTALLED_APPS should work, but it's worth noting that it's really only a "silly" work-around, as you missed a step earlier on. Had syncdb been run before you created the models for that app, you wouldn't have to use the work-around.
Just for future ref. If South is giving you any problems:
Remove the migrations directories from your app directories
Delete South_migrations from your database
Run manage.py syncdb
Go back to using South (e.g. './manage.py convert_to_south something, ./manage.py migrate ...')
This seems obvious, but I'd highly recommend reading the docs.
Even after reading the answers to this question I struggled to understand how to use South effectively.
That all changed of course the day I read the docs and you should too, South is simpler to use than you might think.
http://south.aeracode.org/docs/about.html
http://south.aeracode.org/docs/tutorial/index.html
http://south.aeracode.org/docs/convertinganapp.html#converting-an-app
I also found this useful:
http://www.djangopro.com/2011/01/django-database-migration-tool-south-explained/
And make sure you read Jeff Atwood's Coding Horror articles on database version control.
How do I get South to work and sync
correctly with everything? The only
thing I can think of is remove my app
from INSTALLED_APPS, then run syncdb,
then add it back on.
I have used that fix with South troubles in the past. Not a pretty solution but very effective ;)
But the main problem is that your order isn't correct. You should have run syncdb before the tutorial. Than it works properly.