【问题标题】:django.db.utils.DatabaseError: no such tabledjango.db.utils.DatabaseError:没有这样的表
【发布时间】:2013-12-14 11:20:38
【问题描述】:

我在 Django 项目中使用 Scrapy。

在我的 pipelines.py 文件中,我可以毫无问题地从 Django 导入模型:

from competitions.models import Competition

我可以成功显示竞赛模型的属性列表:

for field_name in Competition._meta.get_all_field_names():
    print field_name #>>> OK

但是Competition.objects的所有方法如Competition.objects.get() raise django.db.utils.DatabaseError: no such table: competitions_competition"

例如,当我尝试获取实例时出现此错误:

uefa_champ_leagues = Competition.objects.get(code='EUR_C1_2013')

我已经应用了来自 Saving Django model from Scrapy projectAccess django models inside of Scrapy 的建议,并且由于导入有效,我怀疑问题出在那里。

有什么想法吗?

【问题讨论】:

  • 你运行syncdb了吗?表是否存在于数据库中?
  • "yes" 和 "yes" 整个 Django 项目已经运行好几个月了。我只是在测试 Scrapy 而不是 BeautifulSoup。
  • 如何在自定义 django 管理命令中使用 Scrapy? docs.djangoproject.com/en/dev/howto/custom-management-commands
  • @janos:谢谢你的参考,我试试看
  • @janos:感谢您,django admin 命令不仅是一个很棒的发现,而且还解决了我的问题。非常感谢!

标签: django django-models scrapy


【解决方案1】:

尝试将python manage.py shell 提供的类似环境组合在一起是一个常见的错误。它肮脏且令人困惑,并导致诸如 OP 中的问题:似乎 Django 找不到数据库文件的正确位置,或类似的东西。 (而且你并不孤单,我一开始也犯了这个错误。)

编写与您的 Django 站点一起使用的脚本的推荐解决方案是 create a custom django-admin command,以便您可以使用 python manage.py yourcommand 运行它。它干净、可测试,而且逻辑无论如何都属于你的 Django 项目。

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2017-02-19
    • 2012-09-28
    • 2019-05-17
    • 2021-12-10
    • 2020-05-30
    • 2020-02-11
    • 2014-11-04
    • 2012-10-16
    相关资源
    最近更新 更多