【问题标题】:Django doesn't create any tables in Postgres databaseDjango 不在 Postgres 数据库中创建任何表
【发布时间】:2015-11-09 21:01:37
【问题描述】:

我在 Django 1.8 上有一个带有初始数据夹具的应用程序。当我运行manage.py migrate 时,我得到以下输出:

Operations to perform:
  Synchronize unmigrated apps: food, locations, messages, staticfiles, core
  Apply all migrations: auth, sessions, admin, contenttypes
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
/home/myuser/venv/lib/python3.4/site-packages/django/core/management/commands/loaddata.py:229: RemovedInDjango19Warning: initial_data fixtures are deprecated. Use data migrations instead.
  RemovedInDjango19Warning

Installed 87 object(s) from 1 fixture(s)
Running migrations:
  No migrations to apply.

所以看起来夹具已经安装,但不是真的 - 当我登录到我的 postgres 用户并运行 psql\dt 时,没有列出任何表(我确保首先使用 @ 连接到数据库987654325@)!尝试在浏览器中查看应用程序时,我得到:ProgrammingError at / relation "locations_openinghours" does not exist。 (这恰好是应用尝试访问的第一个表)。

【问题讨论】:

  • 在运行python manage.py migrate 之前,您是否尝试过运行python manage.py makemigrations
  • 是的,我以前这样做过——当我再次这样做时,我得到No changes detected。我的项目中的任何地方都没有名为迁移的文件夹(没有创建任何文件夹)。
  • 您可以添加更多信息吗?比如向我们展示您的模型的代码 sn-p 以及您的设置的 INSTALLED_APPS 部分?
  • 是的,我现在已经做到了。谢谢!

标签: python django database postgresql


【解决方案1】:

您可以尝试以下步骤,看看是否能解决您的问题:

  1. 删除您应用的所有迁移文件,以及django_migrations 表中应用迁移的数据库记录。
  2. 运行:python manage.py makemigrations <appname>
  3. 运行:python manage.py migrate <appname>

除了上述之外,您还可以尝试将元类设置managed = Trueapp_label = <name of your app> 添加到每个模型类中

class Food(models.Model): class Meta: app_label = "food" managed = True

你班上的其他人都和你一样。当然,为您的所有模型添加此 Meta。确保app_label 是小写的,就像你在INSTALLED_APPS 设置中一样。

【讨论】:

  • 这个解决方案对我不起作用..它实际上创建了默认条目数据库,但不是数据库另一部分中的辅助条目,我也有一个数据库路由器,这可能是一个原因吗?基本上我可以连接现有的手动创建的数据库。但是没有使用 about migrations 命令创建新的 postgresql 数据库。
【解决方案2】:

我解决了它,但这是一个愚蠢的问题。首先,当第一次运行python manage.py makemigrations 时,您应该指定要迁移的应用程序 - 所以我使用了python manage.py makemigrations myapp。其次,我设置项目的方式,manage.py 默认使用 dev 设置,这是写入 SQLite 数据库。我添加了--settings=core.settings.production 标志,它起作用了。

【讨论】:

  • 开发设置的事情以前也让我感到困惑:-)
  • 你在哪里添加了 settings=core.settings.production 标志?我是否在 manage.py 中添加一行 settings=core.settings.production
  • 我在 settings.py 中更改了数据库名称,然后进行了迁移,然后重新启动了服务器并且它工作了。我必须创建新数据,然后它出现在我的 postgres 数据库中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2014-11-12
  • 2015-11-14
  • 2013-02-21
  • 1970-01-01
  • 2015-11-16
  • 2019-05-19
相关资源
最近更新 更多