【问题标题】:No such column error message没有这样的列错误消息
【发布时间】:2014-08-27 20:52:26
【问题描述】:

我从 django 网站阅读了教程,现在我碰壁了。这看起来很简单,但它给了我一个问题。每次我运行 populate_rango.py 脚本时都会出错。

我已经根据 Tango with Django 站点中的示例修改了我的脚本和我的 models.py 文件,但仍然没有创建列之一。

错误:

    Starting Rango population script...
Traceback (most recent call last):
  File "populate_rango.py", line 67, in <module>
    populate()
  File "populate_rango.py", line 8, in populate
    url="http://www.google.com")
  File "populate_rango.py", line 55, in add_page
    p = Page.objects.get_or_create(category=cat, title=title, url=url, likes=likes, views=views)[0]
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-    packages/django/db/models/manager.py", line 154, in get_or_create
    return self.get_queryset().get_or_create(**kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 376, in get_or_create
    return self.get(**lookup), False
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 304, in get
    num = len(clone)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 77, in __len__
    self._fetch_all()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 857, in _fetch_all
   self._result_cache = list(self.iterator())
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/query.py", line 220, in iterator
    for row in compiler.results_iter():
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 713, in results_iter
    for rows in self.execute_sql(MULTI):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 786, in execute_sql
    cursor.execute(sql, params)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/django/db/backends/util.py", line 69, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/db/utils.py", line 99, in __exit__
   six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-         packages/django/db/backends/util.py", line 53, in execute
    return self.cursor.execute(sql, params)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-    packages/django/db/backends/sqlite3/base.py", line 451, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such column: rango_page.likes

populate_rango.py

import os
def populate():
    search_cat = add_cat('Search Engins')

    add_page(cat=search_cat,
        title="Google",
        url="http://www.google.com")

     add_page(cat=search_cat,
        title="Yahoo !",
        url="http://www.yahoo.com")

    add_page(cat=search_cat,
        title="Bing",
        url="http://www.bing.com")

    social_cat = add_cat("Social Media")

    add_page(cat=social_cat,
        title="Facebook",
        url="http://www.facebook.com")

    add_page(cat=social_cat,
        title="LinkedIn",
        url="http://www.linkedin.com")     

    add_page(cat=social_cat,
        title="Twitter",
        url="http://www.twitter.com/")

    news_cat = add_cat("News Sites")

    add_page(cat=news_cat,
        title="CNN",
        url="http://www.cnn.com/")

    comme_cat = add_cat("Commerce")     

    add_page(cat=comme_cat,
        title="Amazon",
        url="http://www.amazon.com")

    add_page(cat=comme_cat,
        title="eBay",
        url="http://www.ebay.com")

    for c in Category.objects.all():
        for p in Page.objects.filter(category=c):
            print "- {0} - {1}".format(str(c), str(p))

def add_page(cat, title, url, views=0, likes=0):
    p = Page.objects.get_or_create(category=cat, title=title, url=url, likes=likes, views=views)[0]
    return p

def add_cat(name):
    c = Category.objects.get_or_create(name=name)[0]
    return c


if __name__ == '__main__':
    print "Starting Rango population script..."
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tangorango.settings')
    from rango.models import Category, Page
    populate()

modes.py:

from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)

    def __unicode__(self):
        return self.name

class Page(models.Model):
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=128)
    url = models.URLField()
    likes = models.IntegerField(default=0)    
    views = models.IntegerField(default=0)

    def __unicode__(self):
        return self.title

【问题讨论】:

  • 你在扩展模型后运行python manage.py syncdb了吗?
  • @TimZimmermann 是的,我做到了。我生成了 sql 表,它在我运行 python manage.py sql rango 时显示,但是当脚本运行时出现错误
  • 你检查了该列是否存在于数据库中?
  • 我该怎么做。我跑了“python manage.py sql rango 并显示在那里。还有其他方法可以检查
  • python manage.py sql 只生成 SQL 语句,它不执行这些语句,因此不会改变数据库模式。如何检查列是否存在取决于您使用的数据库。

标签: python django django-models django-forms django-admin


【解决方案1】:

运行这个命令:

python manage.py sqlall <your_app>

查看结果,如果其中没有likes 表,则运行此命令并手动添加:

python manage.py dbshell

您可以使用以下代码添加它:

ALTER TABLE "Page" ADD COLUMN "likes" IntegerField(0)

但请注意,一旦创建表,sync db 不会进行集成架构更改。您必须手动删除数据库并再次执行syncdb。 有关更多信息,请阅读 django 站点中的 syncdbTHIS 配方!

【讨论】:

  • 感谢您的回复。我检查并喜欢列出,但我的脚本没有看到它。
  • 好 com 所以我建议您是否可以删除您的数据库并重新创建和同步。
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2011-11-11
  • 2017-02-09
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多