" python manage.py syncdb"不创建表

时间:2014-04-23 05:56:58

标签: python django

我第一次跑

python manage.py syncdb

它为我创建了数据库和表格,然后我尝试添加更多应用程序,这就是我所做的:

创建应用
python manage.py startapp newapp

然后我在{。:

中将'newapp'添加到INSTALLED_APPS
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'newapp',
)

最后我跑了syncdb

python manage.py syncdb

以及我得到的结果:

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

我检查了我的数据库,没有名为newapp的表,没有包含newapp的表名。

6 个答案:

答案 0 :(得分:6)

我也遇到了这个问题,并且能够通过删除我的应用程序中的迁移文件夹来绕过它。某种程度上已经创建并且诱使syncdb认为它已经完全迁移,但那些迁移脚本实际上并没有做任何有用的事情。显然,如果你真的想要保存迁移,请不要尝试这个,但我正在使用一个全新的应用程序和模型。

答案 1 :(得分:4)

我尝试了上面的大部分想法:

  • 确保导入models.py(验证在makemigrate期间执行的模块),
  • 删除migrations文件夹
  • 设置managed = True(这是默认值),
  • 使用python manage.py inspectdb(如果我手动创建了表,则正确地转储了表)。

关键是分别在应用上运行makemigrations

  

python manage.py makemigrations <app_name>

执行makemigrations步骤的一部分。然后你做

  

python manage.py migrate

之后像往常一样。

(适用于Django 1.10,使用Postgres 9.5)。

Django documentation

Credit, related post

答案 2 :(得分:3)

如果你跑:

python manage.py inspectdb > somefile.txt

如果您的数据库结构与您的django模型匹配,您可以快速查看。

答案 3 :(得分:1)

我遇到了同样的问题,但我没有任何&#34;迁移&#34;夹。我解决了它,如下所示。

我刚刚添加了app_label的模型代码

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

此外,请确保在myapp/models/__init__.py

中引用它是可发现的
from model_file.py import MyModel

答案 4 :(得分:0)

我遇到了同样的问题并注意到它创建了一个看起来没空的db.sqlite3文件:

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

我尝试使用文件名作为参数再次运行sqlite,并且有效:

$ 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 ...

答案 5 :(得分:0)

你应该使用这个命令

eor

您从manage.py所在的位置运行syncdb