【问题标题】:DataBase Error when running python manage.py runserver运行 python manage.py runserver 时出现数据库错误
【发布时间】:2013-02-13 19:59:21
【问题描述】:

我在 PowerShell 上使用 Django 1.4.3,运行 python manage.py 后出现数据库错误 异常值:

(1054, "Unknown column 'ventas_cliente.apellidos' in 'field list'")

所以我正在关注一个 Django 教程,并且我有一个项目的以下目录:

demo/
    demo/
        apps/
            ventas/
                __init__.py
                admin.py
                models.py
                tests.py
                views.py
            __init.py
        __init__.py
        settings.py
        urls.py
        wsgi.py
 manage

在 admin.py 下我有:

from django.contrib import admin
from demo.apps.ventas.models import cliente.producto

# Register the ventas models
admin.site.register(cliente)
admin.site.register(producto)

从models.py,

from django.db import models

class cliente(models.Model):
    nombre      = models.CharField(max_length=200)
    apellidos    = models.CharField(max_length=200)
    status      = models.BooleanField(default=True)

class producto(models.Model):
    nombre      = models.CharField(max_length=200)
    descripcion = models.TextField(max_length=300)
    status      = models.BooleanField(default=True)

我正在使用 MySQL,但我没有更改数据库。 runserver 确实有效,我可以访问 localhost:8000/admin。我有一个名为“ventas”的新类别,其中包含“cliente”和“producto”子类别。我可以访问“producto”,但“cliente”给了我数据库错误。

似乎有什么问题?我怀疑这与我的 models.py 文件有关,但我不知道为什么。

【问题讨论】:

  • 我怀疑您以前更改过架构?只是一个想法。你为什么不现在加载一个 sqlite 数据库,运行 syncdb 看看它是否有效。如果是这样,则当前数据库中的架构可能不同步并且 syncdb 没有处理它。 syncdb 不处理已创建数据库的更改架构。如果我的怀疑是正确的,请尝试向南迁移。将 settings.py 中的 db 更改为新的 sqlite db,即使您已经在使用 postgresql 或 mysql。现在只是为了测试。
  • @CppLearner 是的,syncdb 仍然有效。
  • 只是为了确保我们在同一页面上。你是说在将 settings.py 指向一个新的 sqlite3 数据库之后,你可以进入 admin 了吗?
  • @CppLearner 见上文。
  • 让我们澄清一下。此错误通常表明您的表架构已过时。问问自己最近是否更改了 models.py。如果是这样,转到seetings.py,将数据库更改为sqlite3。这不会擦除 mysql 数据库。您只需断开 django 与它的连接几分钟。运行syncdb然后runserver,进入admin看看有没有错误。如果您仍然不想执行上述操作,那没关系,请转到 MySQL,检查您的 cliente 表,看看是否可以找到 apellido 属性。我想排除一个可能的原因:p

标签: database django


【解决方案1】:

您的 model.py 和代码不同步。

命令

$ python manage.py syncdb 

做什么

遍历模型,如果该模型不存在表,则创建表和匹配字段。如果一个表确实存在,它不会对该表做任何事情。因此,如果您添加了一个字段,那么“syncdb”虽然听起来像,但不会在数据库中创建自上次 syncdb 以来添加的那些字段。

如果您想同步您的模型和代码,您必须删除表,以便 syncdb 将创建它们。你可以使用:

$ python manage.py flush  

“将数据库返回到它在 syncdb 执行后立即所处的状态。” 资源。 https://docs.djangoproject.com/en/dev/ref/django-admin/#flush

【讨论】:

  • 您不想删除表格。甚至不要这样做。你必须养成做迁移的习惯。当您使用生产代码和具有实时数据的生产环境时,您将如何迁移?
  • 好点。如果您想成为专业人士,请考虑投资和学习南方或进化。如果您想修复错误并继续编码,这将正常工作。
  • 是的。这是真的,然而,他甚至不明白为什么它不起作用。他正在使用 MySQL,我认为这比在开发模式下使用 sqlite3 好得多。如果他使用的是 sqlite3,我们只会说“去他妈的,删除它”。您应该建议他正确的做法,但在开发模式下警告他快速解决方法。 :p
  • 另外,拥有一个包含固定装置和运行刷新的设置是一种很好的开发实践。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 2015-11-25
相关资源
最近更新 更多