MongoDB+Django知识点
来源:互联网 发布:alexa软件 编辑:程序博客网 时间:2024/06/17 19:25
这里我好好的来说一下如何安装Mongodb数据库,曾经自己是被坑惨了的,所以现在就把怎么实现的来进行讲解一下,免得和自己一样走那么多的弯路。
(1)首先从官网去下一个MongoDB,这个没什么好说,就是找到符合自己电脑的版本就好了
(2)在下好了之后,傻瓜式的安装,指定好要安装的路径(重要),我的路径为:D:\mongodb
(3)在安装好之后,目录下应该是只有bin这一个文件夹目录的
(4)配置一下系统变量,这个方便自己以后在cmd中的每个目录都能用mongodb的命令,所以还是配一下好(这个应该都会吧,就是和java配置jdk一样)。
直接到我的电脑中,右键属性,再高级选项,然后环境变量,找到path,然后添加刚刚那个bin所在的目录路径就好了。
(5)在安装路径下创建两个文件夹,一个叫做data,一个叫log,并且在log这个文件夹里面,再创建一个mongodb的文件(用记事本创建就好了,不创也行,但是一定要有log的这一级文件夹,否则后面启动不了数据库)
(6)启动mongodb服务:打开命令行输入命令
>mongod --dbpath "d://mongodb//data" --logpath "d://mongodb//log//mongodb.log" --logappend
解析:mongod --dbpath 命令是创建数据库文件的存放位置,启动mongodb服务时须要先确定数据库文件存放的位置,否则系统不会自己主动创建,启动会不成功。--logpath 表示日志文件存放的路径 --logappend 表示以追加的方式写日志文件
(7)在window中的我的电脑里面添加一个服务选项,这样的作用相当于安装MySQL一样,以后启动就可以从服务里面直接启动了。在cmd中通过命令:mongod --logpath "d://mongodb//log//mongodb.log" --logappend --dbpath "d://mongodb//data" --directoryperdb --serviceName MongoDB --install
这样就能够实现了。
(8)别高兴太早了,当系统中有mongdb这个服务选择的时候,点击开启,可能会出现一个错误。
(9)别急,当出现这个问题的时候,是否还记得再前面,我们创建了一个data的目录,这时候,只需要把data目录里面的内容全部删除就可以了,这原因可能就是出现冲突了,所以导致无法开启。
(10)好了,这个时候开启服务,应该是能够正常启动了。
(11)然后再cmd中,通过命令mongod,则开启了服务,接着再用mongo命令,则可以进入mongodb的控制了,这里面就和mysql的管理一样了。下面也有一些这方面的知识点。
温馨提示:管理数据库的时候,最好用一个可视化的工具来进行管理,这样总的还是方便一点的,但是千万别忘记了如何用命令来操作数据库,这也是程序员需要掌握的。
一:MongoDB的基本操作知识:
1:查看数据库:db
2:查看所有数据库:show dbs
3:切换数据库:use 数据库名
4:删除数据库:db dropDatabase()
5:集合创建:db。createCollection(name , options)
6:查看当前数据库的集合:show collections
7:删除集合:db。集合名称。drop()
8:Mongo支持的数据类型
9:插入数据:db。集合名称。insert(document) //类似MySql中的insert操作
例如:db.student.insert({name:小明,age:18})
10:查询数据:(1)db。集合名称。find() //返回所有数据 //类似MySql中的 select * from 表名
(2)db。集合名称。findOne() //返回一条数据
(3)db。集合名称。find()。pretty() //将查询的结果格式化(以json格式显示)
11:更新数据:db。集合名称。updata(<query> ,<updata>,{nuli:<boolean>}) //参数一:查询条件 参数二:修改的内容 参数三:修改的行数,默认修改一行
例如:db。student。updata。({name:小明},{name:小红} ) //修改了对应的名字
如果要指定修改的属性,就要在第二个参数的前面加一个$set:,否则会整个的内容都被修改了
12:数据保存:db。集合名称。save(document)
13:删除集合中的属性内容:db。集合名称。remove(<query>,{justOne:<boolean>}),第二个参数为要进行删除的条数,ture为一条,默认是false,删除多条
例如:db.student.remove({name:小明},{justOne:true}) //删除姓名为小明的,且只删除一条
例如:db。student。remove() //表示全部删除
14:逻辑操作(用例子来解释)
(1)与操作:例如:db。student。find({name:“小明”},{age:{$gt:18}}) //查询名字叫小明并且年龄大于18的数据
(2)或操作:例如:db。student。find($or:【{name:‘小明’},{age:18}】) //查询名字叫小明或者年龄为18的数据
(3)范围运算符:例如:db。student。find({age:{$in:【18,20】}}) //年龄在18到20岁之间的数据
(4)支持正则表达式查询:例如,db。studnet。find({name:{regex:‘^黄’}}) //名字是以黄开头的数据
(5)自定义查询:例如:db。studnet。find({$where:function(){return this。age>20}})
(6)读取指定数量的文档:例如:db。studengt。find()。limit(“里面填入需要返回的数据条数”)
(7)跳过指定数量的文档:例如:db。student。find()。skip(“填入要跳过的数据数量”)
(8)显示指定的字段:例如:db。student。find({} , {name:1})//如果要显示某个字段,则在第二个参数中以字段名和1的这样的形式,不写或者用0都是不显示
(9)排序:例如:db。student。find()。sort({name:1,age:-1}) //1表示升序,-1表示降序
(10)统计个数:例如:db。student。find(写条件)。count()
(11)消除重复:例如:db。student。disnct({‘gender’},{age:{$g5:20}}) //第一个参数:消除重复的字段, 第二个参数是条件
二:接下来说说如何将MongoDB和Django进行结合
随着非关系型数据库的流行,越来越多的人开始使用非关系型数据库,而在之前一般都只是将关系型数据库和Django进行结合,我也是考虑到要用MongoDB,所以就试着进行写写,我主要以一个例子和步骤来进行说明,我相信如果之前有用过关系型数据库和Django的人来说,应该看一下就都明白了。
(1)配置Setting。py文件
其中主要就是说明要使用的数据库的名字和建的集合名字。
DBNAME = 'mymongo' //主要就是这个,其他的地方都是系统文件中已经配置好了的 TEMPLATE_DIRS = ( os.path.join( APP_DIR, 'templates' )) INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog.blogapp',)
(2)编写集合的结构(即表的结构),其实就是写models。py中的内容
#from django.db import modelsfrom mongoengine import *from MyApplicationMongodb.settings import DBNAME#连接数据库的名字connect(DBNAME)class Post(Document): title = StringField(max_length=120, required=True) content = StringField(max_length=500, required=True) last_update = DateTimeField(required=True)这个地方比较关键,主要就是连接数据库,就是通过这里进行声明,然后class里面的内容其实和一般的关系型数据库差不多,只是这里的数据类型有改变,因为mongodb中的数据类型已经发生变化,所以需要对应的进行改变。这里的话,可以去查找一下关于它的数据类型有哪些,我这里就不多解释了,这里也只是用个简单的例子来说明。
(3)配置项目中的urls。py这个文件,很明显这个就是url的映射关系的配置了,这里和一般的配置都一样,自己想如何配置url就如何进行配置就好了
from django.conf.urls import url,includefrom django.contrib import adminurlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^', include('MyApplication.urls')),]这里说一下,就是由于个人的编程习惯而言,习惯性的将url都先映射到Django中的APP中,因为这样在跳转方面和views方面都习惯了,所以就是按照上面的配置,如果大家也是这样的话,千万别忘记了在APP中创建一个urls.。py的文件。。当然,如果你们喜欢直接映射也是可以的啦。
(4)由于我这里是按照上面的方式进行配置,所以我这就需要多了一步,在APP中的urls。py文件(如果不是按照我这样的两级映射的话,可以不用看下面这一步内容)
from django.conf.urls import url,includefrom . import viewsurlpatterns = [ url(r'^index/', views.index), url(r'^update/', views.update), url(r'^delete/', views.delete),]
(5)编写views。py文件(这里就是大家想要进行的操作和传输数据及其获取数据的处理了,根据自己的项目需求来就是了),
from django.shortcuts import render#from django.shortcuts import render_to_responsefrom django.template import RequestContextfrom .models import Postimport datetimedef index(request): if request.method == 'POST': # save new post title = request.POST['title'] content = request.POST['content'] post = Post(title=title) post.last_update = datetime.datetime.now() post.content = content post.save() # Get all posts from DB posts = Post.objects return render(request ,'MyApplication/index.html', {'Posts': posts})def update(request): id = eval("request." + request.method + "['id']") post = Post.objects(id=id)[0] if request.method == 'POST': # update field values and save to mongo post.title = request.POST['title'] post.last_update = datetime.datetime.now() post.content = request.POST['content'] post.save() template = 'index.html' params = {'Posts': Post.objects} elif request.method == 'GET': template = 'MyApplication/update.html' params = {'post': post} return render(request , template, params)def delete(request): id = eval("request." + request.method + "['id']") if request.method == 'POST': post = Post.objects(id=id)[0] post.delete() template = 'index.html' params = {'Posts': Post.objects} elif request.method == 'GET': template = 'MyApplication/delete.html' params = {'id': id} return render(request ,template, params)
(6)编写template模版中的内容,分为3个,index。html , delete。html , update。html
<!-- index.html --><!DOCTYPE html><html> <head> <link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Blongo</h1> <form method="post" action="http://127.0.0.1:8000/"> {% csrf_token %} <ul> <li> <input type="text" name="title" placeholder="Post Title" required> </li> <li> <textarea name="content" placeholder="Enter Content" rows=5 cols=50 required> </textarea> </li> <li> <input type="submit" value="Add Post"> </li> </ul> </form><!-- Cycle through entries --> {% for post in Posts %} <h2> {{ post.title }} </h2> <p>{{ post.last_update }}</p> <p>{{ post.content }}</p> <form method="get" action="http://127.0.0.1:8000/update"> <input type="hidden" name="id" value="{{ post.id }}"> <input type="hidden" name="title" value="{{ post.title }}"> <input type="hidden" name="last_update" value="{{ post.last_update }}"> <input type="hidden" name="content" value="{{ post.content }}"> <input type="submit" name="" value="update"> </form> <form method="get" action="http://127.0.0.1:8000/delete"> <input type="hidden" name="id" value="{{post.id}}"> <input type="submit" value="delete"> </form> {% endfor %} </body></html> <!-- update.html --><!DOCTYPE html><html> <head> <link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Blongo - Update Entry</h1> <form method="post" action="http://127.0.0.1:8000/update/"> {% csrf_token %} <ul> <li><input type="hidden" name="id" value="{{post.id}}"></li> <li> <input type="text" name="title" placeholder="Post Title" value="{{post.title}}" required> <input type="text" name="last_update" value="{{post.last_update}}" required> </li> <li> <textarea name="content" placeholder="Enter Content" rows=5 cols=50 required> {{post.content}} </textarea> </li> <li> <input type="submit" value="Save Changes"> </li> </ul> </form> </body></html><!-- delete.html --><!DOCTYPE html><html> <head> <link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Blongo - Delete Entry</h1> <form method="post" action="http://127.0.0.1:8000/delete/"> {% csrf_token %} <input type="hidden" name="id" value="{{id}}"> <p>Are you sure you want to delete this post?</p> <input type="submit" value="Delete"> </form> </body></html>
(7)好了,这上面的步骤就是一个简单例子的开发过程了,其实回想过来也不是很难,对不对咯?只是怪自己不太熟悉mongodb,在配置的时候花了些功夫,我也把这个内容在这一个博客一开始就进行了总结了,主要也是为了更多的人一起来学习。来享受IT带来的快乐。
(8)顺便说一下,开发的时候用个MongoDB的可视化工具进行开发相对比较好,推荐一个好了,我自己也是用的这一个,robomongo,还挺好用的。。
当然,还有些关于Mongo和Django开发的知识,我都会结合自己的项目进行总结一下,时刻进行更新,然后再进行共享的,欢迎交流。。在这里非常感谢一个博客,因为看了他的博客之后帮助我少走了很多的弯路。大家也可以看看。点击打开链接
https://www.ibm.com/developerworks/cn/opensource/os-django-mongo/#artrelatedtopics感谢感谢。。。。。
下面附加一个mongodbEngine的开发文档
https://segmentfault.com/a/1190000008025156
- MongoDB+Django知识点
- Django 知识点
- Django知识点
- Django+MongoDB
- MongoDB知识点
- Django MongoDB Django NoSQL方案
- django的一些知识点
- Django知识点总结(一)
- Django知识点总结(二)
- Django知识点总结(三)
- Django知识点总结(四)
- Python+Django知识点总结
- Django知识点汇总
- 【MongoDB】MongoDB之遗漏知识点
- Django-MongoDB的使用
- Python Django Mongodb
- mongoDB的知识点
- MongoDB--知识点总结
- android基本控件之进度条progressBar
- compile命令不能执行并报错
- sublime 执行python,并在python2和3之间切换。
- 北京股商安徽分公司解读无人驾驶到底是怎么样的
- PRML 学习: (1) Polynomial Curve Fitting
- MongoDB+Django知识点
- DataBinding 基础使用
- cocos2dx ios app名称添加国际化
- Java新特性-----可变参数,for增强型
- 高可用架构学习笔记--1
- Conda环境移植(克隆)的远程方案
- Java基础之抽象篇
- 在TabNavigator中使用Navigation报错undefined is not an object (this.props.navigation.navigate)
- Redis专题之Windows下Redis的安装及使用