Python3.6.3--Django2.1.1--SQL SERVER实验

本文详细记录了一次使用Python3.6.3和Django2.1.1在Sql Server2012环境下进行Web开发的实验过程,包括新建Django项目、连接远程Sql Server、创建APP、导入数据库模型、批量数据导入、网页连接及原生SQL操作。此外,还涉及到了代码管理和环境配置的相关资源链接。
摘要由CSDN通过智能技术生成

这是一篇实验过程记录

环境:
1.Pycharm 专业版
2.Python3.6.3
3.Django2.1.1
4.Sql Server2012企业版

各种环境搭建:
Python环境搭建:https://www.runoob.com/python/python-install.html
Pycharm的安装:https://blog.csdn.net/qsir/article/details/79362549
(对于学生,可以通过官网认证,完成认证就可以免费使用专业版了,一般要一年认证一次)
Pycharm下的Django入门(包括安装和环境配置):https://blog.csdn.net/Sunshine_ZCC/article/details/73918408

开始做实验
以下仅为个人完成实验关键步骤的记录

1.新建django项目

2.连接远程Sql Server

因为Django并不直接支持Sql Server,所以需要安装这些包:

这里写图片描述
直接在Pycharm的控制太台用”pip install package_name”命令即可

然后修改setting.py:
这里写图片描述

3.创建APP

控制台输入“python manage.py startapp app_name”
然后会自动生成相应的APP文件夹,下图是我创建的名为Log的APP
这里写图片描述

4.从数据库中导入已经存在的表模型,以供后台使用

控制台输入:python manage.py inspectdb
然后你就会在控制台看到数据库中已有表格的models:
这里写图片描述

然后在控制台输入:python manage.py inspectdb > App_name/models.py
就会将这些models导进你对应APP的models.py中,完成之后你就可以在这个文件夹里看到映射过来的model了:
这里写图片描述
完成映射之后就可以在你的项目里面使用啦

(这一步我纠结了好久,不知道怎么映射已有的表格,废了好多时间·····)

5.批量导入数据

5.1导入(.xlsx)
为了导入excel表格们需要先安装xlrd包,在控制台输入:“pip install xlrd”命令即可
然后记得在使用时import这个包

data = xlrd.open_workbook(r'C:\Users\wansh\Desktop\tbCell.xlsx')
#打开要导入的表格,这里我写的绝对路径,
                table = data.sheet_by_index(0)
                #从表格中读入数据
                successLines= 1
                #我设置的用于记录成功导入行数的计数器
                workList = []
                #用于存放每一行数据的列表
                failLines = 0
                #用于记录导入失败的行数的计数器
                for line in range(1, table.nrows):
                #从第一行开始,到最后一行,这里的第一行是指除去表头之后
                #table.nrows就是整个表的行数
                    row = table.row_values(line)
                    #获取一行的数据
                    if row:     
                    #检查是否为空行
                        if (type(row[0]) == str and type(row[1]) == str and type(row[2]) == str
                            and type(row[3]) == float and row[3] % 1 == 0 and type(row[4]) == str
                            and type(row[5]) == float and row[5] % 1 == 0
                            and type(row[6]) == float and row[6] % 1 == 0 and type(row[7]) == float and row[7] % 1 == 0
                            and type(row[8]) == float and row[8] % 1 == 0
                            and type(row[9]) == float and row[9] % 1 == 0 and type(row[10]) == str
                            and type(row[11]) == float
                            and type(row[12]) == float and type(row[13]) == str and type(row[14]) == float
                            and type(row[15]) == float and type(row[16]) == float and type(row[17]) == float
#判断数据类型和数据库中的是否一致,为的是保证数据库不崩溃
#这里有一个我自己发现的小技巧
#因为无法直接判断excel中的数据是否为整型
#经过我的反复尝试后可以等价于判断这个单元格里的数据是否为float型,并且对1取模等于0
                            workList.append(Tbcell(city=row[0],
                                                   sector_id=row[1],
                                                   sector_name=row[2],
                                                   enodebid=row[3],
                                                   enodeb_name=row[4],
                                                   earfcn=row[5],
                                                   pci=row[6],
                                                   pss=row[7],
                                                   sss=row[8],
                                                   tac=row[9],
                                                   vendor=row[10],
                                                   longitude=row[11],
                                                   latitude=row[12],
                                                   style=row[13],
                                                   azimuth=row[14],
                                                   height=row[15],
                                                   electtilt=row[16],
                                                   mechtilt=row[17],
                                                   totletilt=row[18]))
                               #将excel中每一列的数据和数据库表格中的属性进行绑定
                               #TbCell是一个model
                               #workList.append()就是绑定列属性的函数
                               successLines = successLines + 1

                        else:
                            failLines = failLines + 1
                            print("有数据类型不对")
                    else:
                        failLines = failLines + 1
                        print("出现空行!")

                    if successLines % 1000 == 0 or successLines + failLines >= table.nrows:      
                    #每1000行进行一次插入,或者最后一批不足1000行时插入
                        Tbcell.objects.bulk_create(workList)
                        #批量插入
                        workList = []
                        #插入后将工作列表进行清空

5.2导入(.csv)

table = open(r'C:\Users\wansh\Desktop\tbMROData.csv')
#打开表格读入数据
#其实所谓csv就是用逗号分隔
#所以这样读出来的每一行数据中每个单元格内容是用“,”分隔开的
                print("读取文件结束,准备导入!")
                successLines = 1
                workList = []
                next(table)
                #这里是为了将指针下移一行,不读取表头
                failLines = 0
                for line in table:
                    row = line.split(",")
                    #利用逗号将每一行数据进行分隔
                    workList.append(Tbmrodata(timestamp=row[0], servingsector=row[1], interferingsector=row[2],
                                              ltescrsrp=int(row[3]), ltencrsrp=int(row[4]), ltencearfcn=int(row[5]),
                                              ltencpci=int(row[6]))
                                    )
                    #绑定列属性
                    successLines = successLines + 1
                    if successLines % 10000 == 0:  # 每10000行进行一次插入
                        print("已插入到")
                        print(successLines)
                        Tbmrodata.objects.bulk_create(workList)
                        workList = []
                Tbmrodata.objects.bulk_create(workList)
                #插入最后的行

5.3字符串转datetime

#date转化前是字符串
#需要import datetime这个包
date = "07/12/2016 00:00:00"
date = datetime.strptime(row[0], "%m/%d/%Y %X")

日期各种格式如下:
%a 星期的简写。如 星期三为Web
%A 星期的全写。如 星期三为Wednesday
%b 月份的简写。如 4月份为Apr
%B 月份的全写。如 4月份为April
%c 日期时间的字符串表示。如:04/07/10 10:43:39
%d 日在这个月中的天数(是这个月的第几天)
%f 微秒(范围[0,999999])
%H 小时(24小时制,[0, 23])
%I 小时(12小时制,[0, 11])
%j 日在年中的天数 [001,366](是当年的第几天)
%m 月份([01,12])
%M 分钟([00,59])
%p AM或者PM
%S 秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)
%U 周在当年的周数当年的第几周),星期天作为周的第一天
%w 今天在这周的天数,范围为[0, 6],6表示星期天
%W 周在当年的周数(是当年的第几周),星期一作为周的第一天
%x 日期字符串(如:04/07/10)
%X 时间字符串(如:10:43:39)
%y 2个数字表示的年份
%Y 4个数字表示的年份
%z 与utc时间的间隔 (如果是本地时间,返回空字符串)
%Z 时区名称(如果是本地时间,返回空字符串)
%% %号本身

5.4使用map和eval进行批量字符串转浮点型或整型

row = ['abc', 'def', 'ghi','11'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值