计算机毕业设计hadoop+spark+hive 高考志愿填报推荐推荐系统 高考数据分析可视化大屏 高考爬虫 高考分数线预测 数据仓库 大数据毕业设计

基于spark的高考志愿推荐系统设计综述

                                        

王 磊

(人工智能与大数据学院)

摘要:随着我国高考制度的不断完善以及大数据技术的迅速发展,高考志愿推荐系统的需求日益增长。本文着重探讨了如何利用Apache Spark这一强大的大数据处理框架,构建一个高效、准确的高考志愿推荐系统。该系统以springboot程序为基础,通过对海量数据的挖掘和分析并将数据存储到mysql数据库,结合考生的兴趣、成绩和职业规划等因素,为其提供个性化的志愿推荐。首先,本文介绍了Spark的核心概念和数据处理流程,以及其在高考志愿推荐系统中的应用价值。然后,详细阐述了系统的架构设计,包括通过Python爬虫进行数据采集、预处理、模型训练和推荐生成等关键环节。此外,文章还深入讨论了实现个性化推荐的算法和技术,如协同过滤、矩阵分解和深度学习等。然而,在实践中,我们也面临着一系列的挑战。例如,数据稀疏性、冷启动问题以及算法的可扩展性和准确性等。针对这些问题,我们提出了一系列优化策略和解决方案,如采用混合推荐算法、引入用户画像和动态调整模型参数等。最后,本文通过实验验证了基于Spark的高考志愿推荐系统的可行性和有效性。实验结果表明,该系统在提高推荐准确率、用户满意度和降低填报成本等方面具有显著优势。同时,该系统的实施也有助于推动教育信息化和个性化教育的发展,为考生提供更加科学、全面的高考志愿填报服务。

关键词:Apache Spark;协同过滤算法;Python爬虫;springboot;mysql数据库;

1.研究的目的和意义

随着科教兴国战略和人才强国战略的逐步实施,我国高等教育取得了超常规的跨越式发展,其中具有历史意义的变化就是高等教育规模的迅速扩大。全国高考报名人数在2020年已经突破了1000万大关,也就是说,每年将会有超过1000万的高考考生进行高考。谈到高考,就不得不说高考志愿填报这件事情,无论是上本科还是上专科,志愿填报是必须走的一个重要流程。高考志愿填报和高考都是人生中最重要的一步。如果说高考是为了获取高等学府的敲门砖,那么志愿填报将会影响到考生未来的前途。填报志愿科学、合理,就能够提高被和考生考试成绩相符合的高校录取的概率;如果志愿选择不当,找不准与考生考分相对应的高校,即使考出了不错的成绩,也可能与重点大学擦肩而过,或者高分低就,甚至会出现落榜的情况,被迫走征集志愿,留下终的遗憾。所以有人说,高考成功与否,70%靠实力,30%看志愿。所以我们针对这个现状,利用大数据的手段,对高考志愿填报进行研究,预测各高校录取线所在区间,为高考志愿填报提供建议。与传统在书本上获取高校招生信息相比,在线推荐系统[1]有着很多优点:(1)检索便捷,考生可以通过多种检索途径进行检索,比如录取批次,文理类别,院校地区等途径进行快速且精准的检索。(2)信息量大,在线系统能够提供海量的高校信息,相比高考志愿录用信息相关的书本而言,在线系统的信息能够更全面。  (3)使用方便,在线系统后端使用数据库对数据进行存储,相比于厚厚的一本高考志愿利用信息相关的书籍,使用在线系统搜寻信息更加便捷。

高考志愿推荐系统的问世,能够有效的解决以下几个问题:(一)解决高考志愿填报的痛点:高考志愿填报是一个复杂而重要的过程,需要考生和家长仔细考虑各种因素。然而,由于信息不对称和缺乏有效的决策支持工具,很多考生和家长在填报志愿时感到迷茫和困惑。基于Spark[2]的高考志愿推荐系统可以提供个性化的志愿推荐,帮助考生和家长更好地理解和选择适合自己的志愿,从而解决这一痛点;(二)提高志愿填报的效率和准确性:传统的志愿填报方式需要考生和家长手动查找和对比各种信息和数据,效率低下且容易出错。基于Spark的高考志愿推荐系统可以利用大数据和机器学习技术[3],对历年高考数据进行分析和挖掘,为考生提供更加准确和全面的志愿推荐,从而提高志愿填报的效率和准确性;(三)推动大数据和人工智能技术在教育领域的应用和发展:基于Spark的高考志愿推荐系统是大数据和人工智能技术在教育领域的一次重要应用。该系统的研究和开发不仅可以提高高考志愿填报的效率和准确性,还可以推动大数据和人工智能技术在教育领域的应用和发展,为未来的教育改革提供有益的借鉴;(四)促进教育公平:基于Spark的高考志愿推荐系统可以综合考虑各种因素,包括考生的兴趣、能力、成绩等,为考生提供更加个性化的志愿推荐。这样可以避免单一因素导致的决策偏差,从而促进教育公平。

2. 国内外研究现状

2.1国内研究现状

随着物联网和移动互联网技术的飞速发展,现已经步入了大数据时代,根据我国颁布实施的《促进大数据发展行动纲要》《大数据产业发展规划》等一系列重大政策,旨在大力发展我国的大数据产业,全面提升我国大数据的基础技术能力、应用创新能力。根据国际数据公司IDC的《数据世界》研究项目的统计,2020年前,世界的数据总量以每年40%-60%的速度不断产生,内容涉及生活的各个领域,蕴含着巨大的价值。大数据技术主要分为两个分支,大数据基础存储[4]和大数据挖掘分析[5]。大数据存储主要解决了有效存储大规模数据的问题,大数据分析是指批量处理或挖掘大数据背后的价值信息。国内推荐系统的研究起步相对较晚。但是随着亚马逊个性化推荐系统的成功应用和国内电子商务的蓬勃发展,国内以阿里巴巴为首的电子商务网站也陆续把目光投向了对推荐系统原型的研究与开发中。国内推荐系统方向取得出色成果的公司有百度、论文网、阿里、腾讯、今日头条和新浪等等。2006年,当当网率先对用户提供个性化推荐服务[6],将音频、视频和书籍等信息推荐给用户,该服务已一推出就受到广大用户的青睐;2008年9月,淘宝网推出自己的个性化推荐系统产品“i淘宝”;2011年,百度强力推出个性化首页“一人一世界”;2014年阿里巴巴举办“天池”个性化推荐大赛,促进了我国推荐算法的发展;2016年,阿里云旗下YunOS的推荐算法团队在ACM RecSys上区的金牌。

2.2国外研究现状

大数据不仅关注数据规模本身,也表现在各行业各领域对于数据挖掘分析, 获得数据背后的隐含价值信息,实现创新应用服务的迫切需求。以Google为代表的互联网公司提出分布式数据处理平台整合独立计算机的资源以提供计算服务,极大的推动了大数据技术与实际应用相结合[7]。Spark大数据系统是UC Berkeley AMP实验室所开源的分布式通用并行计算框架,旨在实现高可靠性和高性能的大数据应用平台[8]。推荐系统是在20世纪90年代,Xerox Palo Alto研究中心研发出Tapestry推荐系统[9],于是逐渐被人们所了解。推荐系统的主要玩家包括 Google Cloud , Amazon Cloud, IBM Cloud 等。尽管推荐系统目前出现了一些主要的技术支撑点,包括抖音和今日头条,推荐领域的 2B 公司仍然乏善可陈。之后,各个研究机构针对不同的应用场景提出多种推荐系统实现方案,包括音乐推荐系统Ringo,电影推荐系统[10]BellCore Video等。在学术界,ACM在2007年单独成立了ACM推荐系统会议[11]。推荐系统通过分析处理挖掘到的用户、项目或其他类型的信息进行推荐,并按照一定的规则将产生的内容推送给用户。

3. 理论基础

(1)python爬虫、request库和pymysql库

Python爬虫就是使用Python程序开发的网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。主要用于搜索引擎,它将一个网站的所有内容与链接进行阅读,并建立相关的全文索引到数据库中,然后跳到另一个网站。爬虫一般是指网络资源的抓取,由于Python的脚本特性,易于配置对字符的处理非常灵活,Python有丰富的网络抓取模块,因此两者经常联系在一起就被叫作Python爬虫。爬虫可以抓取某个网站或者某个应用的内容提取有用的价值信息[12]。还可以模拟用户在浏览器或者app应用上的操作行为,实现程序自动化。Python非常适合开发网络爬虫的编程语言,相比于其他静态编程语言,Python抓取网页文档的接口更简洁;相比于其他动态脚本语言,Python的urllib2包提供了较为完整的访问网页文档的API。Python中有优秀的第三方包可以高效实现网页抓取,并可用极短的代码完成网页的标签过滤功能[13]。

requests库是一个用于发送HTTP请求的第三方库,它可以让Python程序发送各种类型的HTTP请求,如GET、POST、PUT、DELETE等。使用requests库可以方便地获取网页内容,并且能够处理各种复杂的HTTP请求和响应。requests库的设计目标是使得发送HTTP请求变得简单易用,它提供了简洁的API接口,可以方便地构造和解析HTTP请求和响应。requests库还支持自动转换编码方式、处理cookies、会话管理、请求超时等功能,同时还可以处理HTTP连接和重定向等操作。requests库是一个功能强大、易用性强的Python HTTP请求库,可以极大地简化Python爬虫的开发工作[14]。

PyMySQL是一个用于连接MySQL数据库的Python库,PyMySQL允许Python程序通过SQL语句与MySQL数据库进行交互,可以进行数据的增删改查等操作。此外,PyMySQL还支持事务处理、连接池等功能,方便开发者进行高效、稳定的数据库操作。本文中将通过PyMySQL库实现Python爬虫与mysql数据库的交互,使爬虫爬取的数据保存在数据库不同的表中[15]。

(2)Spark框架

Spark最初由美国加州伯克利大学实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Spark作为大数据计算平台的后起之秀,在2014年打破了Hadoop保持的基准排序纪录,使用206个节点在23分钟的时间里完成了100TB数据的排序,而Hadoop则是使用2000个节点在72分钟的时间里完成同样数据的排序。也就是说,Spark仅使用了十分之一的计算资源,获得了比Hadoop快3倍的速度。新纪录的诞生,使得Spark获得多方追捧,也表明了Spark可以作为一个更加快速、高效的大数据计算平台。Spark具有如下几个主要特点:(一)运行速度快:Spark使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;(二)容易使用:Spark支持使用Scala、Java、Python和R语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程;(三)通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;(四)运行模式多样:Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源[16]。

Spark最大的特点就是将计算数据、中间结果都存储在内存中,大大减少了IO开销,因而,Spark更适合于迭代运算比较多的数据挖掘与机器学习运算。使用Hadoop进行迭代计算非常耗资源,因为每次迭代都需要从磁盘中写入、读取中间数据,IO开销大。而Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果作运算,避免了从磁盘中频繁读取数据[17]。

(3) 基于用户的系统过滤算法(UserCF) and 基于物品的协同过滤算法(ItemCF)

基于用户的系统过滤算法(UserCF): 基于用户的协同过滤算法(UserCF)是一种利用用户的行为数据和偏好信息进行推荐的方法。该算法通过分析用户的历史行为和偏好,找出与目标用户兴趣相似的其他用户,然后根据这些相似用户的喜好和行为,为目标用户推荐相应的物品或服务。UserCF算法的核心思想是“人以群分”,即相似的人会有相似的兴趣和偏好。因此,该算法首先会计算不同用户之间的相似度,然后根据相似度的高低将用户聚类分组。对于每个组内的用户,算法会找出他们共同喜欢的物品或服务,然后根据这些信息为目标用户推荐相似的物品或服务。UserCF算法的优点在于它可以为用户提供个性化、精准的推荐,同时能够发现用户的潜在兴趣和需求。但是,该算法也存在一些缺点,例如对于冷启动用户(即新加入的用户)的推荐效果较差,因为算法需要一定的用户行为数据才能进行准确的推荐[18]。

基于物品的协同过滤算法(ItemCF): 基于物品的协同过滤算法(ItemCF)是一种利用用户的历史行为数据和物品之间的相似度进行推荐的方法。该算法通过分析用户对物品的偏好和行为,找出与目标物品相似的其他物品,然后根据用户对相似物品的喜好和行为,为目标用户推荐相应的物品或服务。ItemCF算法的核心思想是“物以群分”,即相似的物品会有相似的属性和特征,因此用户对它们的偏好也可能相似。该算法首先会计算不同物品之间的相似度,然后根据相似度的高低将物品聚类分组。对于每个组内的物品,算法会找出它们共同被喜欢的用户,然后根据这些信息为目标用户推荐相似的物品或服务。ItemCF算法的优点在于它可以为用户提供个性化、精准的推荐,同时能够发现用户的潜在兴趣和需求。此外,该算法对于冷启动用户(即新加入的用户)的推荐效果也较好,因为算法不需要用户行为数据即可进行准确的推荐[19]。

(4)Mysql数据库

MySQL是一个常见关系型数据库管理系统。MySQL优化的 SQL查询算法,能有效地提高查询速度。支持多线程,充分利用CPU资源。它能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。提供 TCP/IP、ODBC 和 JDBC等多种数据库连接途径。提供用于管理、检查、优化数据库操作的管理工具。因此,实时监控 MySQL数据库服务器能够帮助运维人员及时定位问题根源,有利于数据库性能的优化,对互联网服务质量的提升有着重要的研究价值[20]。

MySQL中包括普通索引、主键索引、唯一索引、联合索引和全文索引。普通索引可加快查询速度;唯一索引在加快查询速度的同时,还可限制字段值的唯一性,允许为空;全文索引主要针对文本内容进行分词,加快对文本型的信息查询速度;联合索引是由多列组成的索引,查询效率提升高于多个单列索引合并的效率;主键索引类似于唯一索引,主键具有唯一性,加快查询速度,但不能为空[21] 。

4. 小结

基于Spark的高考志愿推荐系统是一个使用Apache Spark框架构建的机器学习系统,旨在根据考生的个人信息和高考成绩,为其推荐合适的大学和专业。该系统利用Spark的分布式计算能力,对大规模数据集进行快速处理和分析,并采用协同过滤算法对用户进行个性化推荐。该系统的核心功能包括:1.数据预处理:对原始数据进行清洗、去重、转换等操作,提取出有用的特征,如考生的个人信息、高考成绩、大学和专业信息等。2.用户画像:根据考生的个人信息和历史行为数据,构建用户画像,以便更好地了解用户的需求和偏好。3.协同过滤:采用基于物品的协同过滤算法(ItemCF)和基于用户的协同过滤算法(UserCF),根据用户画像和物品相似度,为用户推荐合适的大学和专业。4.模型训练和优化:使用Spark的MLlib库进行模型训练和优化,如使用随机森林、梯度提升等算法对推荐模型进行训练,并采用交叉验证等技术对模型进行评估和调整。5.实时推荐:根据用户画像和实时数据,为用户提供实时的志愿推荐服务。

然而,该系统也存在一些潜在的挑战和限制:1.数据隐私和安全:在处理考生个人信息时,需要严格遵守相关法律法规和隐私政策,确保数据的安全性和隐私保护。2.系统性能和稳定性:由于系统需要处理大规模数据集并为用户提供实时服务,因此需要保证系统的性能和稳定性,避免出现服务中断或数据丢失等问题。

参考文献

[1] 王金权.大数据背景下高校大学生知识智能推荐系统的设计[J].无线互联科技,2023,20(09):36-39+73.

[2] 杨珍珍,张坚君.基于Spark技术的高校校史编研系统研究与实现[J].浙江档案,2022,(01):51-53.DOI:10.16033.

[3] 安秋雨,余艳,熊熙.多任务特征映射网络跨域推荐模型[J/OL].哈尔滨理工大学学报,1-12[2023-12-28].

[4] 胡琼.大数据环境中计算机网络安全存储研究[J].佳木斯大学学报(自然科学版),2021,39(06):73-75+128.

[5] 谢海强,张秀华,张斌年.ETC发行方数据分析与挖掘的应用探究[J].中国交通信息化,2023,(11):74-77.DOI:10.13439/j.cnki.itsc.2023.11.005.

[6] 蒋万胜,田姿.论人工智能之深度学习与人类学习的异同[J].安康学院学报,2023,35(06):9-15+35.DOI:10.16858/j.issn.1674-0092.2023.06.002.

[7] Majhi K S ,Shial G .Challenges in Big Data Cloud Computing And Future Research Prospects: A Review.[J].Smart CR,2015,5(4):340-345.

[8] Yao Q .Research on the Standard Paradigm of Integrating Mathematical Modeling Ideas and Methods into Interactive Data Analysis System[C]//Singapore Management and Sports Science Institute(Singapore),Information Engineering Research Institute(USA).Proceedings of 2018 3rd ICMIBI International Conference on Applied Social Science and Business(ICMIBI-ASSB 2018).Jiangxi Modern Polytechnic College;,2018:5.

[9] 李圆,王孝东,于淼.以穿衣搭配数据为基础的协同过滤算法改进[J].纺织高校基础科学学报,2023,36(02):93-100.DOI:10.13338/j.issn.1006-8341.2023.02.014.

[10] 黄奕宸.基于用户画像的电影推荐系统的设计与实现[J].铜仁学院学报,2023,25(06):75-83+108.

[11] 罗婷予,谢康,刘意.大数据驱动的企业与用户互动创新推荐系统及应用[J].北京交通大学报,2023,22(01):33-45.DOI:10.16797/j.cnki.11-5224/c.20230303.006.

[12] 姜庆玲,张樊.基于Python和Requests快速获取网页数据的方法研究[J].现代信息科技,2023,7(16):100-103+108.DOI:10.19850/j.cnki.2096-4706.2023.16.022.

[13] 朱烨行,赵宝莹,张明杰等.基于Scrapy框架的微博用户信息采集系统设计与实现[J].现代信息科技,2023,7(24):41-44+48.DOI:10.19850.

[14] 张启宁,吴国俊.基于Python网络爬虫技术的乡村旅游数据采集与分析[J].产业科技创新,2023,5(06):66-68.

[15]冯淼.基于Python的电视剧视频弹幕分析[J].电脑知识与技术,2023,19(30):34-36.DOI:10.14004/j.cnki.ckt.2023.1580.

[16] Savita C ,V. K ,R. S , et al.Parametrized Optimization Based on an Investigation of Musical Similarities Using SPARK and Hadoop[J].SN Computer Science,2023,5(1).

[17] 钟鸣,刘建东,刘博等.基于Spark与混沌系统的图像加密算法[J].计算机应用与软件,2023,40(08):342-349.

[18]王蕴森.基于情感分析的音乐推荐系统研究[D].中北大学,2022.DOI:10.27470/d.cnki.ghbgc.2022.000097.

[19] 章岩.电商平台个性化推荐对消费者购买决策的影响研究[J].商场现代化,2023,(23):55-57.DOI:10.14013/j.cnki.scxdh.2023.23.012.

[20] 黄旭.分布式MySQL数据库集群在线监测系统设计与实现[D].哈尔滨:哈尔滨工业大学,2012.

[21] 郑阿奇.MySQL教程[M].北京:清华大学出版社,2017:90.

核心算法代码分享如下:

from flask import Flask, request
import json
from flask_mysqldb import MySQL

# 创建应用对象
app = Flask(__name__)
app.config['MYSQL_HOST'] = 'bigdata'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = '123456'
app.config['MYSQL_DB'] = '2412_gaokao'
mysql = MySQL(app)  # this is the instantiation


@app.route('/tables01')
def tables01():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table01''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['level3_name','bk_num','zk_num']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables02')
def tables02():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table02''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['province_name','score']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables03')
def tables03():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table03''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['batch_name','num']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables04')
def tables04():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table04''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['spname','num']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route("/getmapcountryshowdata")
def getmapcountryshowdata():
    filepath = r"D:\\hadoop_spark_hive_gaokao_fenxi_vmvare2024\\server\\data\\maps\\china.json"
    with open(filepath, "r", encoding='utf-8') as f:
        data = json.load(f)
        return json.dumps(data, ensure_ascii=False)


@app.route('/tables05')
def tables05():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table05''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['province_name','num']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables06')
def tables06():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table06''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['name','rank']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables07')
def tables07():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table07''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['name','rank']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables08')
def tables08():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table08''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['zslx_name','num']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)

@app.route('/tables09')
def tables09():
    cur = mysql.connection.cursor()
    cur.execute('''SELECT * FROM table09''')
    #row_headers = [x[0] for x in cur.description]  # this will extract row headers
    row_headers = ['name','view_total']  # this will extract row headers
    rv = cur.fetchall()
    json_data = []
    #print(json_data)
    for result in rv:
        json_data.append(dict(zip(row_headers, result)))
    return json.dumps(json_data, ensure_ascii=False)


if __name__ == "__main__":
    app.run(debug=True)

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】适合专科和本科毕业生的【原创论文】【已降重】【万字】【本科】【专科】【毕业论文】【预览目录】【预览正文】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B站计算机毕业设计大厂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值