简体   繁体   中英

“python manage.py syncdb” not creating tables

I first ran

python manage.py syncdb

and it created the database and tables for me, then I tried to add more apps, and here's what I did:

create apps by

python manage.py startapp newapp

Then I added 'newapp' to INSTALLED_APPS in setting.py:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'newapp',
)

At last I ran syncdb :

python manage.py syncdb

and here's the result I get:

Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

I checked my db and there is no table named newapp , no table's name including newapp .

I also ran into this issue, and was able to get around it by removing the migrations folder inside my app. Somehow that had already gotten created and was tricking syncdb into thinking that it was fully migrated already, but those migration scripts didn't actually do anything useful. Obviously don't try this if you actually have migrations you want to save, but I was working with a brand new app and models.

I tried most of the ideas above:

  • making sure the models.py is imported (verified that the module executed during a makemigrate),
  • deleting the migrations folder
  • setting managed = True (this is default anyways),
  • used the python manage.py inspectdb (which correctly dumped the table, if I had created it manually).

The key was simply to run a makemigrations on the app separately:

python manage.py makemigrations <app_name>

as part of performing the makemigrations step. Then you do

python manage.py migrate

afterwards as usual.

(applies to Django 1.10, using Postgres 9.5).

Django documentation

Credit, related post

If you run:

python manage.py inspectdb > somefile.txt

You can get quickly check out if your database structure is matching your django models.

i got same problem, but i didn't have any "migration" folder. I solved it like below.

I just added app_label with the model code,

class MyModel(models.Model):
...
    class Meta:
        managed = True      # add this
        app_label = 'myapp' # & this

Also, make sure it is discoverable by referencing it in myapp/models/__init__.py

from model_file.py import MyModel

I was having the same problem and noticed that it had created a db.sqlite3 file that didn't seem empty:

$ ls -l
-rw-r--r--   1 sauron  staff  122880 Jul 31 01:22 db.sqlite3

I tried running sqlite again using the filename as an argument and that worked:

$ sqlite3 db.sqlite3 
SQLite version 3.7.13 2012-07-17 17:46:21
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .schema
CREATE TABLE "auth_group" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(80) NOT NULL UNIQUE
);
... many rows ...

You should be using this command

python manage.py migrate

where you were runing syncdb from the location where manage.py resides

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM