【问题标题】:"python manage.py syncdb" not creating tables“python manage.py syncdb”不创建表
【发布时间】:2014-06-07 18:59:29
【问题描述】:

我第一次跑

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 的表名。

【问题讨论】:

  • newapp中有模型吗?请出示您的 models.py。
  • @timo.rieber 是的,你是对的。非常感谢!!

标签: python django


【解决方案1】:

我也遇到了这个问题,并且能够通过删除我的应用程序中的迁移文件夹来解决它。不知何故,它已经被创建并欺骗了 syncdb 认为它已经完全迁移了,但是这些迁移脚本实际上并没有做任何有用的事情。如果您确实有要保存的迁移,显然不要尝试此操作,但我正在使用全新的应用程序和模型。

【讨论】:

  • 我遇到了同样的问题,删除迁移文件夹允许 syncdb 针对我的新应用程序 + 模型运行。
  • 看来,如果您在设置文件中从已安装的应用程序中注释“南”,您可以创建整个数据库
【解决方案2】:

如果你运行:

python manage.py inspectdb > somefile.txt

您可以快速检查您的数据库结构是否与您的 django 模型匹配。

【讨论】:

  • 非常有用。谢谢!!
  • 好的,我发现我的数据库结构与我的模型不匹配。我该如何解决这个问题?
【解决方案3】:

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

  • 确保 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)。

Django documentation

Credit, related post

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,但我没有任何“迁移”文件夹。我像下面这样解决了它。

    我刚刚在型号代码中添加了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
    

    【讨论】:

    • 引用部分重要
    【解决方案5】:

    你应该使用这个命令

    python manage.py migrate
    

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

    【讨论】:

      【解决方案6】:

      我遇到了同样的问题,并注意到它创建了一个看起来不为空的 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 ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 2015-01-13
        • 2014-05-17
        • 1970-01-01
        • 2016-01-05
        • 2012-05-27
        • 1970-01-01
        相关资源
        最近更新 更多