【问题标题】:django.db.utils.OperationalError: my_table has no column id error?django.db.utils.OperationalError: my_table has no column id 错误?
【发布时间】:2014-04-21 01:34:47
【问题描述】:

我正在 Python 解释器中测试我的 Django 应用程序的 models.py 文件:“myapp”,但一直遇到此错误:

django.db.utils.OperationalError: table myapp_table1 has no column named attribute1_id

我的 models.py 中有 2 个表,table1 和 table 2。

 class table1 (models.Model):
   name = models.CharField(max_length=25)
   def __str__(self):             
     return self.name
 class table2 (models.Model):
   name = models.CharField(max_length =25)
   attribute1= models.ForeignKey(Type, related_name = "att1_set+", default=None)
   attribute2= models.ManyToManyField(Type, related_name = "att2_set+", default=None)
   def __str__(self):             
     return self.metric_name

在我的 python 解释器中:

>>> from my_app.models import table1, table2
>>> t1 = table1 (name = "ty1", id = 0)
>>> t1.save()
>>> t2 = table1 (name = "ty2", id = 1)
>>> e1 = table2 (name = "as", attribute1 = t1)
>>> e1.save() 
>>> error aforementioned after .save

但是,当我执行:“manage.py sql myapp”时,我看到了我的 table2:

CREATE TABLE "my_app_table2" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"name" varchar(25) NOT NULL,
"attribute1_id" integer NOT NULL REFERENCES "myapp_table1" ("id")
)

【问题讨论】:

    标签: python sql django django-models


    【解决方案1】:

    您必须运行python manage.py syncdb(或python manage.py migrate,如果您使用south - 您应该这样做)才能将更改应用于数据库。

    【讨论】:

    • 当我运行“python manage.py migrate”时,我得到:'django.db.utils.OperationalError: table "my_app_table2_attribute2" already exists'
    • @user3423787 从数据库中删除所有内容并重新运行syncdb + migrate。
    • 如何删除所有内容。我试图做“manage.py flush”。但同样的错误。您真的需要从顶级项目目录中删除 .db 文件吗?
    • 非常感谢,现在可以使用了。那么我的数据库与models.py不同步的问题是什么?每当我对 models.py 进行更改时,我需要同时进行 makemigrations 和 migrate 对吗?
    • 我现在在 tests.py 中测试我的“models.py”。但是,当我运行“manage.py test”时,每个类的方法(即def())中定义的代码不会被执行。但是,如果我将代码移到 def 之外,但仍然在每个类中,它就会被执行
    【解决方案2】:

    先删除pycache,再删除所有0001_initial.py,然后python manage.py flush,然后

    python manage.py makemigrations
    

    然后

    python manage.py migrate
    

    然后

    python manage.py createsuperuser
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-23
      • 2020-04-26
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多