【问题标题】:Database Error on Dotcloud, Postgres DjangoDotcloud,Postgres Django上的数据库错误
【发布时间】:2012-11-28 17:57:13
【问题描述】:

我正在使用 Dotcloud 部署我的 django 应用程序。 我使用 Postgres 作为数据库。

我的应用程序有一个新模型,我想刷新和同步数据库。当我这样做时,一切正常。我的新模型(名为“Competition”)出现在我的管理员中。

问题是另一个模型 Match 与模型 Competition 有一个 ForeignKey。当我在管理员中转到“匹配”时,出现此错误:

     DatabaseError at /admin/myproject/match/
     column myproject_match.competition_id does not exist
     LINE 1: ...team_challenger_id", "sportdub_match"."sport_id", "sportdub_...

你知道为什么 syncdb 没有让它工作吗?

感谢您的帮助。

编辑:我的两个模型

     class Competition(models.Model):
       name = models.CharField(max_length=256)
       comp_pic = models.ImageField(upload_to="comp_pics/")

       def __unicode__(self):
           return self.name


     class Match(models.Model):
        team_host = models.ForeignKey(Team, related_name='host_matches')
        team_challenger = models.ForeignKey(Team, related_name= 'challenger_matches')
        sport = models.ForeignKey(Sport)
        competition = models.ForeignKey(Competition)

【问题讨论】:

  • 你能发布你的两个模型源代码吗?您确定您运行了 syncdb 并且列/表在您的数据库中吗?你登录数据库确认了吗?
  • 我编辑了我的问题。是的,我运行了syncdb。而且我认为 dotcloud 在我刷新它时会自动执行此操作。我不知道列/表是否在我的数据库中。我该如何检查?
  • 我的 models.py 中的更改在本地完美运行
  • dotCloud 不会自动运行 syncdb,您需要显式运行它,或者将其放入您的安装后脚本中。您可以通过 ssh 进入数据库服务并运行 psql 命令,或使用 pgadmin 或 navicat 等 GUI 数据库浏览器直接登录数据库。

标签: django postgresql dotcloud


【解决方案1】:

manage.py syncdb 只会创建 missing 表。如果表已经存在,但定义无效,则不会更新。这很可能是您遇到的问题。

至少有三种方法可以解决这个问题。

  1. 简单的方法:使用manage.py reset 有效地删除+重新创建所有表。很简单,但是您当然会丢失数据。
  2. 懒惰的方式:安装django_extensions并使用manage.py sqldiff。它将向您展示数据库的当前结构与预期结构之间的差异。 sqldiff 将很好地向您展示可以更新现有数据库以符合您的模型的 SQL 语句。然后,您可以在 SQL shell 中执行这些语句。
  3. 干净的方法:使用像south 这样的迁移框架来处理数据库架构更新。当然,如果您处于开发的早期阶段,这是大材小用的(您不想在进行本地开发时每次添加/更改/删除字段时都编写数据库迁移!)但是如果您的项目需要更长的时间寿命,我绝对推荐查看south

【讨论】:

  • 谢谢!第一个解决方案完美运行。唯一奇怪的是,重置后,我没有被要求创建超级用户,旧的被保留了。所以我有一个错误“用户配置文件匹配查询不存在”。所以我在重置后做了冲洗。一切正常。再次感谢您
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 2014-01-20
  • 2014-09-10
  • 2014-10-24
  • 2012-10-10
  • 2015-08-29
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多