0

我在我的 python(2.7) 项目中使用 mongodb 和 django 框架..当我给 python manage.py runserver 它会工作但是如果我同步 db (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)

如何解决这个问题呢?

4

2 回答 2

4

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

于 2012-04-17T18:57:13.997 回答
2

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

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

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

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

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

于 2012-04-17T09:45:42.577 回答