【问题标题】:What's the error in my project?我的项目有什么错误?
【发布时间】:2012-04-28 14:40:49
【问题描述】:

我在我的 python(2.7) 项目中使用 mongodb 和 django 框架..当我给 python manage.py runserver 它会工作,但是如果我同步数据库(python manage.py syncdb),终端中会显示以下错误

Creating tables ...  
Traceback (most recent call last):
  File "manage.py", line 14, in <module>
    execute_manager(settings)   
  File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute()  
  File "/usr/lib/pymodules/python2.7/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)  
  File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)  
  File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/usr/lib/pymodules/python2.7/django/core/management/base.py", line 351, in handle
    return self.handle_noargs(**options)
  File "/usr/lib/pymodules/python2.7/django/core/management/commands/syncdb.py", line 109, in handle_noargs
    emit_post_sync_signal(created_models, verbosity, interactive, db)
  File "/usr/lib/pymodules/python2.7/django/core/management/sql.py", line 190, in emit_post_sync_signal
    interactive=interactive, db=db)  
  File "/usr/lib/pymodules/python2.7/django/dispatch/dispatcher.py", line 172, in send
    response = receiver(signal=self, sender=sender, **named)  
  File "/usr/lib/pymodules/python2.7/django/contrib/auth/management/__init__.py", line 41, in create_permissions
    "content_type", "codename"  
  File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 107, in _result_iter
    self._fill_cache()  
  File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 772, in _fill_cache
    self._result_cache.append(self._iter.next())
  File "/usr/lib/pymodules/python2.7/django/db/models/query.py", line 959, in iterator
    for row in self.query.get_compiler(self.db).results_iter():
  File "/usr/local/lib/python2.7/dist-packages/djangotoolbox/db/basecompiler.py", line 229, in results_iter
    for entity in self.build_query(fields).fetch(low_mark, high_mark):
  File "/usr/local/lib/python2.7/dist-packages/djangotoolbox/db/basecompiler.py", line 290, in build_query
    query.order_by(self._get_ordering())
  File "/usr/local/lib/python2.7/dist-packages/djangotoolbox/db/basecompiler.py", line 339, in _get_ordering
    raise DatabaseError("Ordering can't span tables on non-relational backends (%s)" % order)

django.db.utils.DatabaseError: Ordering can't span tables on non-relational backends (content_type__app_label)

如何解决这个问题?

【问题讨论】:

  • 很明显,initdb 正在尝试使用 mongo 进行类似连接的查询 :)

标签: python django mongodb pymongo non-relational-database


【解决方案1】:

我在 django 中使用过 mongoengine,但您需要创建一个文件,例如 mongo_models.py。在该文件中定义您的 Mongo 文档。然后,您创建表单以匹配每个 Mongo 文档。每个表单都有一个保存方法,用于插入或更新存储在 Mongo 中的内容。 Django 表单旨在插入任何数据后端(需要一些技巧)

注意:如果您有可以在文档或模型中描述的定义明确且结构化的数据,则不要使用 Mongo。它不是为此而设计的,像 PostGreSQL 这样的东西会更好地工作。

  • 我将 PostGreSQL 用于关系数据或结构良好的数据,因为它对此有好处。内存占用小,响应好。
  • 我使用 Redis 来缓存或在内存队列/列表中操作,因为它非常适合。只要您有足够的内存来处理它,就可以提供出色的性能。
  • 我使用 Mongo 来存储大型 JSON 文档并对它们执行 Map 和 reduce(如果需要),因为它非常适合。如果可以加快查找速度,请务必对某些列使用索引。

不要用圆圈来填充方孔。它不会填满它。

我看到太多帖子有人想用 Mongo 交换关系数据库,因为 Mongo 是一个流行词。不要误会我的意思,Mongo 真的很棒......当你适当地使用它时。我喜欢适当地使用 Mongo

【讨论】:

    【解决方案2】:

    你需要使用 Django-nonrel 而不是 Django。

    【讨论】:

    • @Jonas.H:有没有简单的django-nonrel安装和使用教程……还有django-nonrel和django有什么区别??
    • allbuttonspressed.com/projects/django-nonrel 阅读完该页面后,可以在 django-mongodb.org 找到特定于 MongoDB 的说明
    • 对于其他困惑的人来说,Django-nonrel 是 Django 的一个分叉版本。
    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多