【问题标题】:Django: sqlite3.OperationalError: no such table in python shellDjango:sqlite3.OperationalError:python shell 中没有这样的表
【发布时间】:2018-04-27 03:12:53
【问题描述】:

我正在关注 django 博客教程。当我使用 python manage.py shell 并尝试在 shell 中执行以下命令时

from mainsite.models import Category, Tag
c = Category(name='category test')
c.save()

发生了这个错误:

sqlite3.OperationalError: no such table: mainsite_category

这是我在mainsite 文件夹中的model.py,我认为是正确的:

from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
    name = models.CharField(max_length=100)

def __str__(self):
    return self.name

我试过manage.py makemigrationsmanage.py migrate,可以成功使用manage.py runserver看网站。那么这里有什么问题呢?

编辑:这是我在settings.py中安装的应用程序

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mainsite',
]

还有我的项目结构

|____djangoBlog
| |______init__.py
| |____settings.py
| |____urls.py
| |____wsgi.py
|____mainsite
| |______init__.py
| |____admin.py
| |____apps.py
| |____models.py
| |____tests.py
| |____urls.py
| |____views.py
|____manage.py
|____README.md
|____requirements.txt
|____templates
| |____blog
| | |____index.html

编辑:当我运行python manage.py makemigrationspython manage.py migrate时,输出如下:

No changes detected

Operations to perform:
    Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
    No migrations to apply.

【问题讨论】:

    标签: python django sqlite


    【解决方案1】:

    UPD:

    由于您的项目结构在mainsite 应用程序中缺少migrations 文件夹,这意味着您尚未为该应用程序创建迁移。运行python manage.py makemigrations mainsite,然后运行python manage.py migrate

    来自docs

    要将迁移添加到没有 migrations 目录的应用,请使用应用的 app_label 运行 makemigrations >.

    是的,您可以通过简单的实例创建来创建模型。来自文档Creating objects

    原答案:

    您需要确保已将您的'mainsite' 应用程序包含在settings.py 中的INSTALLED_APPS 中,然后运行迁移。之后,您应该能够执行以下操作:

    c = Category.objects.create(name='category test')
    c.save()
    

    【讨论】:

    • 这个不行,还是出现同样的错误,而且之前出现过(就在我输入c = Category.objects...之后。
    • @Owen 你能用 INSTALLED_APPS 提供你的项目结构和 settings.py 的一部分吗?
    • 我编辑了这个问题。我在另一台电脑上写了这个程序,然后用git把它拉到当前电脑上。
    • @Owen 你的mainsite 应用程序中没有migrations 文件夹,这意味着你还没有创建和运行应用程序的迁移
    • 我试过 makemigrationsmigrate 但什么也没发生(如编辑)。那我该怎么解决呢?
    【解决方案2】:

    @欧文, 根据 vishes_shell 的回答,你必须这样做:

    python manage.py makemigrations mainsite
    

    第一次为了生成包含您的迁移的文件夹迁移,那么您可以这样做

    python manage.py makemigrations
    

    如果您将来添加一个新应用,请不要忘记在使用第二个命令之前再次执行第一个命令(将“主站点”更改为您的应用名称)。

    【讨论】:

      【解决方案3】:

      您的models.py 似乎需要在name 处缩进:

      class Category(models.Model):
          name = models.CharField(max_length=100)
      

      【讨论】:

      • 我相信缺少缩进是复制粘贴的结果。你也错过了 str 方法的缩进。
      • 是的,我也是。但我记得在没有任何 Django 警告的情况下出现这种错误。
      猜你喜欢
      • 2012-01-15
      • 2016-08-23
      • 2017-02-19
      • 2012-09-28
      • 2019-05-17
      • 2021-12-10
      • 2020-05-30
      • 2020-02-11
      • 2014-11-04
      相关资源
      最近更新 更多