python manage.py syncdb"未创建表格
我首先运行了
python manage.py syncdb
这条命令,它为我创建了数据库和表格。然后我想添加更多的应用程序,接下来我做了以下操作:
通过下面的命令创建应用:
python manage.py startapp newapp
然后我在设置文件 setting.py
中把 '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
我之前也遇到过同样的问题,发现它创建了一个名为 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 ...
1
我也遇到了同样的问题,不过我没有找到任何“迁移”文件夹。我是这样解决的。
我只是给模型代码加上了 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
我尝试了上面大部分的想法:
- 确保
models.py
被导入(确认在执行 makemigrate 时模块确实运行了), - 删除
migrations
文件夹, - 设置
managed = True
(反正这个是默认的), - 使用
python manage.py inspectdb
(这能正确显示表格,如果我手动创建过的话)。
关键是要单独对 app 运行 makemigrations
:
python manage.py makemigrations <app_name>
作为执行 makemigrations 步骤的一部分。然后你照常执行:
python manage.py migrate
(适用于 Django 1.10,使用 Postgres 9.5)。
6
我也遇到过这个问题,后来我通过删除我应用里的迁移文件夹来解决了这个问题。这个文件夹不知怎么就被创建了,导致syncdb误以为所有的迁移都已经完成了,但实际上那些迁移脚本并没有做什么有用的事情。显然,如果你有想要保存的迁移,千万不要这样做。不过我当时是在处理一个全新的应用和模型。
4
如果你运行:
python manage.py inspectdb > somefile.txt
你可以快速检查一下你的数据库结构是否和你的Django模型相匹配。