【问题标题】:DatabaseError: column does not exist数据库错误:列不存在
【发布时间】:2015-12-03 14:35:15
【问题描述】:

我在rw_item 表中添加了新列FK_Project,这是Project_Master 表的引用。

dp=# ALTER TABLE digital_publisher_rw_item ADD FK_Project int; 
ALTER TABLE


dp=# ALTER TABLE digital_publisher_rw_item ADD FOREIGN KEY(FK_Project) REFERENCES digital_publisher_project_master(id);
ALTER TABLE

现在我正在编写脚本以将值添加到 rw_item 表中的列 FK_Project

但得到以下异常,

例外

>>> rw_item
<class 'dp.digital_publisher.models.rw_item'>
>>> rw_item.objects.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 67, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 82, in __len__
    self._result_cache.extend(self._iter)
  File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 271, in iterator
    for row in compiler.results_iter():
  File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 677, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 732, in execute_sql
    cursor.execute(sql, params)
  File "/usr/lib/python2.6/site-packages/django/db/backends/util.py", line 15, in execute
    return self.cursor.execute(sql, params)
  File "/usr/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 44, in execute
    return self.cursor.execute(query, args)
DatabaseError: column digital_publisher_rw_item.FK_Project_id does not exist
LINE 1: ..."digital_publisher_rw_item"."deletion_date_time", "digital_p...
                                                             ^

Django 模型.py:

FK_Project = models.ForeignKey(Project_Master, null=True, blank=True)

如何处理?

【问题讨论】:

  • 您是否手动添加新字段?为什么不使用 django 迁移?
  • 是,手动,不,我无法迁移 django,因为同一版本有很多产品,这在任务列表中,但需要几个月的时间。
  • 我不是要你迁移 django,我说的是 django 数据库迁移。这是 django 必须自动应用您对模型所做的更改的工具,例如在您的情况下添加一个字段。 docs.djangoproject.com/en/1.8/topics/migrations
  • 好的,我去看看。

标签: python sql django postgresql


【解决方案1】:

由于您是手动添加字段,而不是像尚旺所说的那样使用Django's database migrations,您只需要确保字段名称匹配即可。在这种情况下,请注意 Django 给出的确切错误:

DatabaseError: column digital_publisher_rw_item.FK_Project_id does not exist

它正在寻找FK_Project_id,而不是您添加的FK_Project。这是因为 Django 中的一个约定,它将_id 附加到 ForeignKey 列的末尾。因此,您有两种处理方式:

  1. 重命名数据库中的列:ALTER TABLE digital_publisher_rw_item RENAME COLUMN FK_Project TO FK_Project_id

  2. 告诉 Django 使用您创建的列:FK_Project = models.ForeignKey(Project_Master, null=True, blank=True, db_column='FK_Project')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2020-02-09
    • 2016-09-14
    • 1970-01-01
    • 2016-04-30
    • 2020-10-25
    • 2013-12-10
    相关资源
    最近更新 更多