【问题标题】:Django 1.8 OperationalError: no such column:Django 1.8 OperationalError:没有这样的列:
【发布时间】:2015-08-05 20:23:44
【问题描述】:

我正在使用 django 1.8,但在添加到我的 models.py 时遇到问题。目前是:

from django.db import models


# Create your models here.
class Company(models.Model):
    role = models.CharField(max_length=32, blank=True)
    name = models.CharField(max_length=70, blank=True)

它工作得非常好,但是每当我尝试添加它然后运行服务器时,我都会得到

OperationalError: no such column [添加元素]

例如,我添加了founder = models.CharField(max_length=200, blank=True),然后运行程序,我得到了

django.db.utils.OperationalError:没有这样的列:company_company.founder

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    在您的控制台中运行以下命令:

    manage.py makemigrations app_name
    manage.py migrate app_name
    

    每次更改应用中的模型时,都应使用 makemigration 和 migrate 命令将更改迁移到数据库。当您向数据库表添加新列时,您必须将此列的值添加到所有现有行。您可以通过在模型的新字段中设置默认值来实现。 或者在运行 migrate 命令时设置值(django 自动提出这个) 您可以在docs 阅读有关此内容的信息

    【讨论】:

    • 当你运行 makemihration 和 migrate 命令时 django 在控制台打印什么
    • 确切的错误太长,无法在此处发布,但最后的重要部分是“django.db.utils.OperationalError: no such column: Companies_company.founder”
    • 当您添加新列时,您应该在模型中为您的字段设置默认值或在迁移命令中为所有现有行设置值
    • 什么意思?我该怎么做?
    • 只需使用您的数据库删除文件。如果您不更改 settings.py,则应将其命名为 mydatabase.sqlite 并放置在项目根目录中。再次运行syncdb。
    【解决方案2】:

    当你运行makemigrations时,在models.py以外的一些其他文件如forms.pyviews.py中对模型字段进行一些操作时会出现此类问题。如果您仔细阅读回溯,您可以找出问题源自哪个文件。

    例如,如果回溯告诉您forms.py 中的一些投诉可能碰巧使用了某些模型字段,只需注释掉正在处理模型字段的代码并再次重新运行makemigrations。希望它能解决问题。

    如果是这样,您可以删除之前添加的 cmets。

    【讨论】:

      【解决方案3】:

      您必须使用 python manage.py makemigrations 重新同步数据库

      【讨论】:

        【解决方案4】:

        也许不是最佳的,但它对我有用(并且默认的东西不起作用):

        1. 删除迁移文件夹中除了 init.py 之外的所有文件
        2. 删除 db.sqlite 文件
        3. doing:python manage.py runserver(没有这个之前要迁移,迁移,那不起作用,我认为它链接到视图/模板调用标签,所以必须先运行)
        python manage.py migrate
        python manage.py makemigrations
        python manage.py migrate
        python manage.py runserver
        python manage.py createsuperuser 
        

        【讨论】:

          【解决方案5】:

          我发现用python3 manage.py sqlflush清除所有数据,然后python3 manage.py flush

          然后makemigrations,sqlmigrate,然后迁移

          它将删除SQL数据库中的所有数据,包括用户和对象

          【讨论】:

            猜你喜欢
            • 2015-02-25
            • 2020-08-16
            • 1970-01-01
            • 2020-12-10
            • 2019-05-20
            • 1970-01-01
            • 1970-01-01
            • 2020-04-30
            • 2014-12-06
            相关资源
            最近更新 更多