Django MongoDB Django NoSQL方案


1 安装MongoDB

mongodb 主页 http://www.mongodb.org/

1,下载所需要的版本,地址:http://www.mongodb.org/display/DOCS/Downloads

(以windows为例,linux下应该比较简单),可以参照官方文档:http://www.mongodb.org/display/DOCS/Home

2,将MongoDB加入环境变量

3,设定好放置数据库文件的路径,比如d:\db

4,打开CMD,不要关闭这个

mongod --dbpath=d:\db\data

5,开始mongo

  1. MongoDB shell version: 1.4.0  
  2. url: test  
  3. connecting to: test  
  4. type "exit" to exit  
  5. type "help" for help  

如果出现这个就表示成功

不要关闭这个。

STEP 2 Django MongoDB

可参考的官方文档:http://django-mongodb.org/topics/setup.html

官方建议使用virtualenv,可以构建虚拟开发环境。(会创建独立目录的python环境)

另一原因,使用的是Django-nonrel。

pip install virtualenv

创建环境

virtualenv myproject

linux的话,

source myproject/bin/activate

windows需要打开Scripts 运行,再activate

安装django-nonrel

pip install hg+https://bitbucket.org/wkornewald/django-nonrel 

安装djangotoolbox

pip install hg+https://bitbucket.org/wkornewald/djangotoolbox 

安装mongodb-engine

pip install git+https://github.com/django-nonrel/mongodb-engine 

windows的话,可以直接考虑(需要安装gitmecurial)和打开那三个网页然后下载文件,安装

python steup.py install

安装完后,需要将djangotoolbox加入settings.py

修改settings.py

  1. DATABASES = {  
  2.    'default' : {  
  3.       'ENGINE' : 'django_mongodb_engine',  
  4.       'NAME' : 'my_database'  
  5.    }  
  6. }

更多的设置:http://django-mongodb.org/reference/settings.html

以及

manage.py syncdb

STEP 3 测试

可参考的中文文档:http://cn.docs.mongodb.org/manual/tutorial/write-a-tumblelog-application-with-django-mongodb-engine/

创建一个新的app,然后修改models.py

  1. from django.db import models  
  2. from django.core.urlresolvers import reverse  
  3.   
  4. from djangotoolbox.fields import ListField, EmbeddedModelField  
  5.   
  6.   
  7. class Post(models.Model):  
  8.     created_at = models.DateTimeField(auto_now_add=Truedb_index=True)  
  9.     title = models.CharField(max_length=255)  
  10.     slug = models.SlugField()  
  11.     body = models.TextField()  
  12.     comments = ListField(EmbeddedModelField('Comment'), editable=False)  
  13.   
  14.     def get_absolute_url(self):  
  15.         return reverse('post', kwargs={"slug": self.slug})  
  16.   
  17.     def __unicode__(self):  
  18.         return self.title  
  19.   
  20.     class Meta:  
  21.         ordering = ["-created_at"]  
  22.   
  23.   
  24. class Comment(models.Model):  
  25.     created_at = models.DateTimeField(auto_now_add=True)  
  26.     body = models.TextField(verbose_name="Comment")  
  27.     author = models.CharField(verbose_name="Name"max_length=255)

添加数据

manage.py shell

创建帖子

  1. >>> from tumblelog.models import *  
  2. >>> post = Post(  
  3. ... title="Hello World!",  
  4. ... slug="hello-world",  
  5. ... body = "Welcome to my new shiny Tumble log powered by MongoDB and Django-MongoDB!"  
  6. ... )  
  7. >>> post.save()

创建评论

  1. >>> post.comments  
  2. []  
  3. >>> comment = Comment(  
  4. ... author="Joe Bloggs",  
  5. ... body="Great post! I'm looking forward to reading your blog")  
  6. >>> post.comments.append(comment)  
  7. >>> post.save()

检查帖子

  1. >>> post = Post.objects.get()  
  2. >>> post  
  3. <Post: Hello World!>  
  4. >>> post.comments  
  5. [<Comment: Comment object>]</

总结:还是不想用,虽然一直想知道原理。但是和想象中的有差距。

相关内容