在学习了一些MongoDB和Django框架的一些基础知识后,我对MongoDB以及Django知识已经有了一个初步的掌握,是时候对学长的项目里面的东西进行一个初步的实践了,于是我选择从Django框架中向MongoDB导入数据的这部分代码开始。通过复用几段学长项目里的代码,在我自己新建的项目中实现向数据库中导入csv文件。

1.新建一个Django项目

选择Exisiting interpreter,打开你的python安装文件夹,选择python.exe

建立好后会得到如下界面

其中,与项目同名的vis1目录是项目的核心文件;templates目录是HTML文件存放处,也就是MTV中的T。manage.py是Django项目管理文件。

在核心文件vis1目录中:

_init_.py:空文件

settings.py:主配置文件

urls.py:主路由文件

wsgi.py:网关接口

2.创建APP

在每个Django项目中可以包含多个APP,相当于一个大型项目中的分系统、子模块、功能部件等等,相互之间比较独立,但也可以有联系。所有的APP共享项目资源。要在Django框架下链接MongoDB,我们就必须建立一个APP。(为了方便我复用学长项目中的代码,我创建了一个与学长相同的APP:datas)

在Pycharm下方的Terminal终端中输入命令:

python manage.py startapp datas

创建好后,django自动生成“datas”文件夹,及一系列文件: (注意:如果你选择vis1->new->python package这样的方式得到的文件夹里将没有这一系列的文件)

3.编辑APP

在Datas中,models是与数据库操作相关,存入或读取数据的文件,所以首先我们需要对它进行配置。刚打开里面只有一句引入库的语句,你需要在这里编写对你要导入数据库的列名进行定义:

因为是为了理解并实践学长的代码,我这里就直接粘贴学长项目中的这部分代码了:

from django.db import models
from mongoengine import *
# Create your models here.class Alldata(models.Model):id = models.BigIntegerField(primary_key=True)ipsmalltype = models.IntegerField()filelen = models.BigIntegerField()fileaffix = models.CharField(max_length=10, null=True)iscracked = models.NullBooleanField()starttime = models.DateTimeField()srcip = models.CharField(max_length=45)dstip = models.CharField(max_length=45)srcport = models.IntegerField()dstport = models.IntegerField()vpi1 = models.IntegerField(null=True)vpi2 = models.IntegerField(null=True)atm1aaltype = models.IntegerField(null=True)

4.注册APP

在配置好了models之后,你要让你的数据库知道该给那个APP创建表,所以需要在vis1目录的settings中注册APP。也就是在

settings中的INSTALLED_APPS中添加你刚才创建好的datas

5.连接mongoDB

一般在Django框架中连接数据库都需要对settings中的DATABASES进行配置,如下图:

而我们这里使用MongoDB数据库,它可以不使用DATABASES,在学长的代码中,他是这样做的:

在DATABASES旁边建立一个DBCONFIG,然后将DATABSES中的内容删掉:

这样,每次连接MongoDB时只需要调用DBCONFIG就行了

6.编写导入csv部分的代码

先建立一个.py文件,然后在里面编写向数据库中导入数据功能的代码,我这里就直接复制学长的项目中有关这一段的代码:

class Data2Mongo:filename = 'ip{}.csv-数据处理.csv'path = 'C:\\Users\\Administrator\\Desktop\\ChinaVis\\2016年数据可视分析挑战赛-挑战1-数据\\'count = range(1, 11)c_raw = 'raw_data'c_clear = 'clear_data'c_uncracked = 'uncracked_data'c_merge = 'merge_data'colname = ['ipsmalltype', 'filelen', 'fileaffix', 'iscracked', 'starttime','srcip', 'dstip', 'srcport', 'dstport', ' vpi1', 'vpi2', 'atm1aaltype']checklist = ['ipsmalltype', 'filelen', 'fileaffix', 'iscracked', 'starttime','srcip', 'dstip', 'srcport', 'dstport', 'vpi1', 'vpi2', 'atm1aaltype']checklist_merge = ['ipsmalltype', 'fileaffix', 'starttime', 'srcip','dstip', 'srcport', 'dstport', 'vpi1', 'vpi2', 'atm1aaltype']res = []max_len = 100000def __init__(self):self.files = []for i in self.count:self.files.append(self.filename.format(i))self.client = MongoClient(DBCONFIG['HOST'], DBCONFIG['PORT'])self.db = self.client.__getattr__(DBCONFIG['NAME'])self.dst_raw = self.db[self.c_raw]self.dst_clear = self.db[self.c_clear]self.dst_uncracked = self.db[self.c_uncracked]self.dst_merge = self.db[self.c_merge]def __del__(self):self.client.close()@staticmethoddef convert_fileaffix(fileaffix):if len(fileaffix) == 0:return ''while fileaffix[0] == '.':fileaffix = fileaffix[1:]if '.' in fileaffix:return Noneelse:return fileaffixdef data2mongo(self):self.dst_raw.remove({})self.res.clear()for i in self.count:print('正在处理文件:%s' % (self.path + self.filename.format(i)))with open(self.path + self.filename.format(i)) as infile:reader = csv.reader(infile)next(reader)for row in reader:fileaffix = self.convert_fileaffix(str(row[3]))if fileaffix is None:continueself.res.append({'ipsmalltype': int(row[1]),'filelen': int(row[2]),'fileaffix': fileaffix if fileaffix != '' else None,'iscracked': int(row[4]) if row[4] == '0' else 1,'starttime': datetime.strptime(row[5], '%Y/%m/%d %H:%M:%S'),'srcip': str(row[6]),'dstip': str(row[7]),'srcport': int(row[8]),'dstport': int(row[9]),'vpi1': int(row[10]) if row[10] != '' else None,'vpi2': int(row[11]) if row[11] != '' else None,'atm1aaltype': int(row[12]) if row[12] != '' else None})if self.res.__len__() == self.max_len:self.dst_raw.insert_many(self.res)self.res.clear()if self.res.__len__() > 0:self.dst_raw.insert_many(self.res)self.res.clear()

记得把需要导入的库及要引用的文件导入,不然会报错:

from pymongo import MongoClient
from datetime import datetime
from vis.settings import DBCONFIG
import csv

其次,需要注意导入的文件路径一定要正确,文件名之间的分隔符是\\,别写反了

7.编写一个调用Data2Mongo的.py文件

我这里建立一个handles.py(为避免复用学长的代码出错,所以取了和学长项目中一样的名称)

from data2mongo import Data2Mongoimport time
if __name__ == '__main__':start = time.clock()tomongo = Data2Mongo()tomongo.data2mongo()

8.运行handles.py

这样,在Django框架下向MongoDB导入.csv文件便实现了。

用Navicate for MongoDB我们可以查看到我们导入的数据如图:

在Django框架下向MongoDB数据库中导入.scv文件数据相关推荐

  1. mysql数据库 导入excel_如何在MySQL数据库中导入excel文件内的数据 详细始末

    在开发项目的时候通常需要使用数据库,数据库Database是用来存储和管理数据的仓库.下面,我们以MySQL数据库为例来看看如何在数据库中导入excel文件内的数据吧. 操作方法 01 MySQL 打 ...

  2. 方法:查询MongoDB数据库中最新一条数据(JAVA)

    使用JAVA语言查询MongoDB中某个数据库某个集合的最新一条数据: MongoCollection<Document> cpu = MongoClient.getDatabase(&q ...

  3. 【报错记录】MySQL向数据库中导入txt文件报错ERROR 1148 (42000): The used command is not allowed with this MySQL version

    背景 想将txt文件导入到数据库中,输入LOAD DATA LOCAL INFILE "D:\dbms_lab\department.txt" INTO TABLE DEPARTM ...

  4. 181216-向数据库中导入csv文件,日期格式不符的问题

    使用postgreSQL时,用\COPY <table> FROM '<path>' WITH CSV HEADER;命令 导入带表头的csv原始数据,导入成功,但查询数据时显 ...

  5. MySQL中导入CSV文件数据

    -- 创建并使用数据库. CREATE DATABASE IF NOT EXISTS `rdsdb`; USE `rdsdb`;-- 创建表 DROP TABLE IF EXISTS `cx_sock ...

  6. MYSQL中导入Excel文件

    本文阐述了一般情况下怎么在mysql中导入excel文件,作者借助工具sqlyog,也可以直接在mysql中操作. 主要步骤: 第一步:首先将excel文件打开另存为csv文件 再将其用Notepad ...

  7. Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中

    概述 利用Scrapy爬取豆瓣电影Top250排行榜电影信息,并保存到MongoDB数据库中 使用pymongo库操作MOngodb数据库 没有进行数据清洗 源码 items.py class Dou ...

  8. MySQL在Django框架下的基本操作(MySQL在Linux下配置)

    注:本文已迁移至CSDN,后续的更新也会在CSDN. http://blog.csdn.net/houchaoqun_xmu/article/details/53813633 http://blog. ...

  9. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  10. mongodb数据库中插入数据

    mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...

最新文章

  1. Java多线程系列七——ExecutorService
  2. mysql 万亿数据_sql-server – 哪个数据库可以处理数十亿/数万亿条记录的存储?...
  3. Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
  4. 句法分析:依存分析(Dependency Parsing)
  5. 没有双11的美团,被饿了么突袭“下沉粮仓”
  6. Android之Http网络编程(四)
  7. 苹果电脑怎么投屏到电视_tcl电视怎么投屏
  8. jmeter如何通过后置处理器提取(正则提取器、json提取器)做接口关联?
  9. 【软件体系结构】架构风格与基于网络应用软件的架构设计:Roy Tomas Fielding】
  10. 程序员面试题100题第03题——求子数组的最大和
  11. loadrunner要点总结
  12. BZOJ4311:向量——题解
  13. 用c语言编程图书管理系统,C语言图书管理系统简洁版
  14. 计算机开机时10声响,电脑开机报警的声音有什么含义?详细教您认识报警声音
  15. 【全局规划】人工势场法(APF)
  16. nowcoder 点击消除 (字符串 + 栈)
  17. 关于前端在vue中实现‘距离某个时间点的倒计时’问题:设置了间隔计算时间,刚开始有停顿。
  18. 提高抗打击能力_如何提高心理抗打击能力?
  19. 投票系统开发问题合集
  20. 使用veracrypt工具将文件或磁盘加密

热门文章

  1. 频繁切换网卡,一款快速设置IP地址的工具,爽到爆。
  2. 使用PHP控制MODBUS-RTU设备
  3. 电容电感频率测量表 电路原理
  4. 企业级多用户发卡平台源码 源码完全开源 无任何加密
  5. Vue开发环境搭建 VsCode
  6. 基于Android的Word在线预览
  7. 阿里播放器使用Aliplayer
  8. BLE蓝牙4.0串口调试助手
  9. [干货]手把手教你写一个安卓app
  10. 前端JS、Vue实现海康萤石直播预览、回放、云台控制功能