2012-04-17 66 views
0

我使用mongodb为我的python(2.7)项目与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) 

如何解决这个问题呢?

+0

很明显,initdb正在尝试使用mongo进行类似连接的查询:) – 2012-04-17 09:18:25

回答

4

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

+0

@ Jonas.H:是否有任何简单的教程可用于django-nonrel的安装和使用......还有什么区别django-nonrel和django? – BobDroid 2012-04-18 04:20:22

+0

http://www.allbuttonspressed.com/projects/django-nonrel 阅读完该页后,可以在http://django-mongodb.org找到关于MongoDB的具体说明 – 2012-04-18 18:20:26

+0

对于任何一个感到困惑的人,Django -nonrel是Django的分支版本。 – 2014-08-02 04:18:24

2

我用过dongang的mongoengine,但是你需要创建一个像mongo_models.py这样的文件。在那个文件中你定义了你的Mongo文档。然后您创建表单以匹配每个Mongo文档。每个表单都有一个保存方法,用于插入或更新Mongo中存储的内容。 Django表单设计用于插入任何数据后端(带有一些工艺)

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

  • 我使用PostGreSQL来处理关系数据或结构良好的数据,因为它很好。小内存占用和良好的响应。
  • 我使用Redis在内存队列/列表中缓存或操作,因为它非常好。为您提供优质的性能,让您拥有应对的记忆。
  • 我使用Mongo来存储大型的JSON文档,并对它们执行Map和Reduce(如果需要的话),因为它非常好。如果可以加快查找,请务必在特定列上使用索引。

不要圆圈填补一个方孔。它不会填满它。

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