元元圆圆欧欧 發表於 2019-7-17 08:49:00

Django操作mongodb

<p>我的项目中已经使用了mysql,现在设计了两个表想要采用mongodb数据库进行存储。</p>
<p>步骤如下(mongodb安装启动在https://www.cnblogs.com/huanhuaqingfeng/p/11188024.html中查看)</p>
<p>1,安装mongoengine</p>
<p>&nbsp; &nbsp; &nbsp;pip&nbsp; install&nbsp;mongoengine</p>
<p>&nbsp; &nbsp; &nbsp;在django中,mongoengine是django与mongodb数据库的连接器</p>
<p>2, 修改settings.py</p>
<p>&nbsp; &nbsp; &nbsp;&nbsp;</p>
<pre>DATABASES = {<br><br>    'default': {<br>      'ENGINE': 'django.db.backends.mysql',<br>      'NAME': 'builddatabase',<br>      'USER': 'root',<br>      'PASSWORD': 'likeshe',<br>      'HOST': '127.0.0.1',<br>      'PORT': '3306',<br>    },<br>    'db1': {<br>      'ENGINE':None,<br>    }<br>}<br><br>import mongoengine   #导入mongoengine</pre>
<pre>conn = mongoengine.connect("Print_Analysis")##Print_Analysis ,我的mongodb数据库的名字<br><br>3,在我的应用Print_Analysis的models.py 中添加表类</pre>
<pre>import mongoengine<br><br></pre>
<pre>class log_info(mongoengine.Document):<br>    fun_name=mongoengine.StringField(max_length=100)<br>    dir_name = mongoengine.StringField(max_length=100)<br>    log_name = mongoengine.StringField(max_length=100)<br>    path = mongoengine.StringField(max_length=255)<br>    status = mongoengine.StringField(max_length=16)<br>    case_num=mongoengine.IntField()<br>    half_case_num = mongoengine.IntField()<br>    fail_case_num = mongoengine.IntField()<br>    line_num = mongoengine.IntField()<br><br>class case_info(mongoengine.Document):<br>    log=mongoengine.ReferenceField(log_info)<br>    funtion = mongoengine.StringField(max_length=255)<br>    exe_status = mongoengine.StringField(max_length=16)<br>    line_start = mongoengine.IntField()<br>    line_end = mongoengine.IntField()<br>    error_count = mongoengine.IntField()<br>    level = mongoengine.IntField()<br>    sucess_num = mongoengine.IntField()<br>    fail_num = mongoengine.IntField()<br>    status_info = mongoengine.ListField()</pre>
<pre><br><br>4,在Print_Analysis的view.py 中添加测试代码</pre>
<pre>def anlaysis_result_test():</pre>
<pre>   var = log_info.objects.create(fun_name="123", dir_name="456", log_name="11.log", path="/mnt/disk2/timetask/Star_HD_Trunk_Iteration_Time/02.01.01.01-3-190608183846/02.01.01.01-3-190608183846-732242087-20190608184531.log",<br>                     status="sucess",                     case_num=0, half_case_num=0, fail_case_num=0, line_num=0)<br><br>   print(var)<br><br>   log_info_obj = log_info.objects.get(log_name="11.log")<br>   print(log_info_obj)<br><br>   case_info.objects.create(log=log_info_obj,funtion="S123",exe_status="SUCESS",line_start=0,line_end=0,error_count=0,level=0,sucess_num=0,fail_num=0,status_info=None)<br>   case_info.objects.create(log=log_info_obj, funtion="S124", exe_status="SUCESS", line_start=0, line_end=0,<br>                   error_count=0, level=0, sucess_num=0, fail_num=0, status_info=None)<br>   case_info.objects.create(log=log_info_obj, funtion="S125", exe_status="SUCESS", line_start=0, line_end=0,<br>                   error_count=0, level=0, sucess_num=0, fail_num=0, status_info=None)<br><br>   return {'status': 'already'}</pre>
<pre>def index(request):    <br>      logger.info("request.method=%s" ,request.method)<br>      #logger.info("request.body=%s" ,request.body)<br>      logger.info("content_type=%s",request.content_type)<br>      logger.info(   "user=%s",request.user.username)<br>      logger.info( "is_authenticated=%d",request.user.is_authenticated())<br>      logger.info( "request.path=%s",request.path)<br>      if not request.user.is_authenticated():<br>         return HttpResponseForbidden()<br><br>      if request.method=='POST':<br>         body = eval(request.body)<br>         op_type = str(body['op_type'])<br>         if op_type == 'anlaysis_result_test':<br>            result=anlaysis_result_test()<br>            return JsonResponse(result)<br><br>5,url路由,Print_Analysis添加在urls.py和settings.py中搞定,这里不说了。(可以查看https://www.cnblogs.com/huanhuaqingfeng/p/11101751.html)<br><br>6,python测试代码</pre>
<pre>def anlaysis_test():    <br>    data = {}<br>    data['op_type'] = "anlaysis_result_test"<br>    response = httprequest.post(url_path + "print_analysis/", json=data)<br>    print response.text<br><br></pre>
<pre>if __name__ == '__main__':&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</pre>
<pre>anlaysis_test()<br><br>7,查看数据库</pre>
<pre class="prettyprint prettyprinted"><span class="pun">   执行完测试后,查看数据库<br>   ./<span class="pln">mongo进入shell<br><img src="https://img2018.cnblogs.com/blog/1715272/201907/1715272-20190717133054550-1864171522.png"></span></span></pre>
<pre class="prettyprint prettyprinted">&nbsp; show dbs 显示所有存在的mongodb数据库</pre>
<p>&nbsp; &nbsp;use&nbsp;Print_Analysis 切换到我的Print_Analysis 数据库</p>
<p>&nbsp; show tables 显示Print_Analysis中的表(又叫集合)</p>
<p>&nbsp;&nbsp;db.log_info.find() 查看集合log_info中的数据</p><br><br>
来源:https://www.cnblogs.com/huanhuaqingfeng/p/11198711.html
頁: [1]
查看完整版本: Django操作mongodb