暑期实习总结(焊点数据管理软件开发):Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转

暑期实习总结(焊点数据管理软件开发):Python操作MySQL数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转

​ 这一周是我在企业实习的最后一周,在企业做的项目已基本完成。这篇博客的目的也是总结一些项目中的一些小问题,和相关功能的代码总结。

​ 这个项目呢,由于企业的保密性,我并不能在此做一个完整的分享。但我可以做一些简单的介绍,记录我认为的一些技术要点。我在自己的简历中更新的该项目的介绍内容如下:

焊点数据管理软件开发:使用Python语言、MySQL数据库、Django框架开发了一个数据管理软件。使用Django搭建前端网页,使用Python语言处理大量焊点数据集并操作MySQL数据库,完成了智能车间质量二环中焊点数据从Excel到MySQL数据库的整合与存储,以及从MySQL数据库导出为Excel表数据的功能。

​ 主要包含的关键点我认为有以下三个:Python操作数据库、Django搭建前端网页、以及Excel中数据与MySQL数据库的互转。

​ 下面我将介绍一些相关功能样例代码:

连接数据库&使用Python操作数据库

在本项目中,我使用的是pymysql包来连接数据库的。个人感觉这个方法用起来非常方便。这个方法可以直接转译Mysql语言,这对于本身就有Mysql数据库的技术基础的友友来说非常方便。以下案例中,各位可以了解到我以上提到的点。

连接数据库:
def mysql_connection_A():# 打开数据库连接try:global dbdb = pymysql.connect(host='localhost', user='root', passwd='xxxxxx', port=3306)# passwd为用户安装mysql时设置的数据库密码print('连接成功!')except:print('something wrong!')# 使用 cursor() 方法创建一个游标对象 cursorglobal cursorcursor = db.cursor()sql = """use a_shift;"""# 这里直接转译mysql语句,将操作链接到a_shift这个数据库cursor.execute(sql)return cursor

该方法用途非常广泛,定义一个变量db来连接数据库,并通过创建一个游标对象来操作数据库。好处就是,用户在mysql中使用的所有sql语句都可以直接在python中完成。比如以上的“use a_shift”就是一段sql语句。

如果还不明白我的意思的话,下面给出一段代码,相信大家会有更深的了解:

sql1 = """DROP TABLE IF EXISTS {table_name}""".format(table_name=table_name)
cursor.execute(sql1)
sql2 = """create table {table_name}(id int primary key auto_increment, weld_num char(8), attr char(16))""".format(table_name=table_name)
cursor.execute(sql2)# 用于存取/提交数据到数据库的一个函数
def data_commit_sql(query1, values):# query:插入数据的sql语句;values:对应的数据库格式的值# 存取数据cursor.execute(query1, values)db.commit()data_commit_sql("INSERT INTO {table_name}(weld_num,attr) VALUES (%s, %s)".format(table_name=table_name), (weld_value, '厚度'))

首先可以看到sql1和sql2两个语句。两者都是sql语句,只不过其中的变量通过format方法给提取出来了。sql1语句的意思如果这个表存在的话,删除该表;sql2语句的意思就是创建一个指定格式的表。由此我们可以知道,通过这样的方法,我们完全能够用python结合简单的sql语句,直接操作数据库,而不需要在数据库中输入任何操作命令。并且其中的变量还能提取出来,从其他途径来获取。

然后就是data_commit_sql(query1, values)这个函数。这个函数实则就是一个游标获取语句和提交数据打包的一个函数。只是由于后面相同的操作太多,我才给他定义的这样一个函数。可以看到函数定义下面的一个例子,insert这个语句。这个语句意思就是在表中插入一些数据。而这个数据是通过values(%s,%s)链接出来的。例子中,第一个%s就对应的weld_value这个变量,第二个%s就对应的’厚度’这个字符串。

所以在pymysql方法的相关操作中,除了最基本的语言方法之外。我们可以通过format()方法和values(%s,)的方法来定义外部变量,从而完成用python操作mysql数据库的相关操作。

Django搭建前端网页

这个网页的搭建方法和教程啥的我这里就不用多说了。具体可以参考我之前的博客,或者去b站看教程:

Django学习记录:初步认识django以及实现了简单的网页登录页面的前后端开发_dumpling0120的博客-CSDN博客

Django学习记录:使用ORM操作MySQL数据库并完成数据的增删改查_dumpling0120的博客-CSDN博客

2022 B站最详细django3教程(django从入门到实践)_哔哩哔哩_bilibili

这里提几个功能简单介绍一下。

form表的使用:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>用户登录</h1>
<form method="post" action = "/login/">{% csrf_token %}<input type = "text" name = "user" placeholder="用户名"><input type = "password" name = "pwd" placeholder="密码"><input type = "submit" value="提交"><span style="color:red;"> {{ error_msg }}</span></form></body>
</html>

这个也是上面有一期博客中已经提到过的登录界面的代码。在这里我想讲的就是,form表的相关使用可以推广。三种类型“text”代表可视化字符,“password”代表不可见的字符(密码),“submit”就是一个提交的跳转按钮。然后使用的时候需要加上{% csrf_token %},不然会报错。

按钮跳转:

1、跳转到某网页:

// 设置按钮
<button οnclick="location.href='{% url 'A_shift' %}'">A班</button>
<button οnclick="location.href='{% url 'B_shift' %}'">B班</button>

注意这个url需要跳转的网页的地址是需要在urls.py这个文件中定义的:

path('pymysql_testA/', views.pymysql_testA, name='A_shift'),
path('pymysql_testB/', views.pymysql_testB, name='B_shift'),

2、点击按钮后实现某些操作:

<button id="showTablesButtonA">A班</button><script src={% static 'js/jquery-3.6.0.min.js' %}></script>
<script>$(document).ready(function() {$('#showTablesButtonA').click(function() {// 发起 Ajax 请求获取表数据$.ajax({url: '/get_tables_A/',  // 表格的路由地址type: 'GET',data: {'is_button_pressed_A': 'true'},success: function(response) {// 在按钮下方显示表数据$('#tableData').html('<h3>A班数据表总览</h3>' + response);// 发送表存在状态到后端$('#is_A_table_generated').val('true');  // 设置隐藏字段的值$.ajax({url: '/database_to_excel/',type: 'POST',data: {'is_A_table_generated': $('#is_A_table_generated').val()},success: function(response) {// 处理成功响应}});}});});});
</script>

这段代码是引入jquery包后的一段JavaScript语言编写的一个按钮响应事件,实现的功能则是如下:

在这里插入图片描述
点击A班/B班按钮,则可以从数据库中提取并查看A班/B班数据库中的数据总列表,展示在网页中。具体代码示例就是上面的例子。其中上面有个这个:$(‘#is_A_table_generated’).val(‘true’); // 设置隐藏字段的值。这里是一个关键,是我作为后续模块中的一个参数的开关,这个隐藏字段在下面的代码起到了传值的作用。不知道我这么解释大家看得懂不hhh。

<h2>请选择您想导出的数据表和存储路径</h2>
<h4>*数据表名请从原数据库表中复制;存储路径格式举例:D:\PyCharm\file2.xls</h4>
<form method="post" action = "/database_to_excel/">{% csrf_token %}<input type="hidden" id="is_A_table_generated" name="is_A_table_generated" value=""><input type="hidden" id="is_B_table_generated" name="is_B_table_generated" value=""><input type = "text" name = "database_name" placeholder="数据表名"><input type = "text" name = "storage_path" placeholder="存储路径"><button type="submit">提交</button></form>

由于本人不太懂JavaScript,故这里不再多赘述。想了解这方面知识的友友可以自行查看相关资料,或私信与我交流。

Excel中数据与MySQL数据库的互转

从excel中将数据传入MySQL中,这个demo其实在第一个大点“连接数据库&使用Python操作数据库”有所涉及。不过我这里还是总结性的讲一下我的一个思路吧。

主要采用的还是下面几个包:

import pandas as pd
import xlwt
import xlrd

下面我就分别讲一下两者互传数据的思路。

从excel中提取数据并存入MySQL

pandas则是用来读取excel数据,然后xlwt和xlrd这两个包则是用来处理表中的值。以下举个简单例子:

excel_data = pd.read_excel(source_file_path_1)
# 提取检测后数据
detect_data = excel_data.iloc[0, 12]
# 提取好的产品数据
good_pro_data = excel_data.iloc[1, 12]

这就是简单的一个pandas读取这个路径下excel表中的值,并将表中相关数据提取出来。然后使用上文提到的data_commit_sql(query1, values)函数将这两个值传进数据库中即可。

从MySQL中提取数据表并存入Excel

由于提取的表格式是不需要改变的,所以这个点我写了一个完整的函数。

def export_to_excel(cursor, table, save_path):"""cursor:     源数据的数据库游标,用于数据库连接table       源数据的数据表,指定需要转换的数据库表save_path       文件保存路径,指定文件保存的位置和excel文档的名字"""# 创建保存数据库的excel表workbook = xlwt.Workbook()worksheet = workbook.add_sheet("sheet1")# 首先向excel表中写入数据表的字段column_count = cursor.execute("desc %s"%table)for i in range(column_count):temptuple = cursor.fetchone()worksheet.write(0, i, temptuple[0])# 向构建好字段的excel表写入所有的数据记录row_count = cursor.execute("select * from %s"%table)for i in range(row_count):temptuple = cursor.fetchone()for j in range(column_count):worksheet.write(i + 1, j, temptuple[j])# 指定路径并保存workbook.save(save_path)print('文件转换成功')# 应用举例    
export_to_excel(cursorA, '{database_name}'.format(database_name=database_name), r"{storage_path}".format(storage_path=storage_path))

注释中也将相关方法说明得很详细了。在使用中调用该函数export_to_excel(cursor, table, save_path)的时候需要注意下相关格式就好。需要注意的是table表名和save_path的格式。table表名字的话建议format一下,然后路径也是建议加个r,防止路径格式报错。


总结

​ 博主本科机械,研究生做控制。这次在车企实习呢,实习内容又是做数据处理以及相关的前后端开发。虽然看上去毫不沾边,但如果能用两个月的时间多学一个技术栈,想想也是极好的。毕竟有目的性地学习,我认为是可以大大提高我的学习效率。况且在这个信息化的时代,这样类似的数据管理系统,几乎每个企业都是有这样的需求并且能够用得上的。所以,我也是非常感谢这样的机会,让我能够了解企业,真实了解并参与企业的相关项目!

​ 感谢你能看到最后,希望我能与大家多多交流技术,一起进步,一起成长!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/57910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用的面试经验分享:程序员们谈论他们的面试历程

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

全套解决方案:基于pytorch、transformers的中文NLP训练框架,支持大模型训练和文本生成,快速上手,海量训练数据!

全套解决方案&#xff1a;基于pytorch、transformers的中文NLP训练框架&#xff0c;支持大模型训练和文本生成&#xff0c;快速上手&#xff0c;海量训练数据&#xff01; 1.简介 目标&#xff1a;基于pytorch、transformers做中文领域的nlp开箱即用的训练框架&#xff0c;提…

老Python程序员职业生涯感悟—写给正在迷茫的你

我来讲几个极其重要&#xff0c;但是大多数Python小白都在一直犯的思维错误吧&#xff01;如果你能早点了解清楚这些&#xff0c;会改变你的一生的。所以这一期专门总结了大家问的最多的&#xff0c;关于学习Python相关的问题来给大家聊。希望能带给大家不一样的参考。或者能提…

Cento7 Docker-compose安装RabbitMQ

RabbitMQ是一个消息中间件&#xff0c;是用Erlang语言编写的。RabbitMQ据说具有良好的性能和时效性&#xff0c;同时还能够非常好的支持集群和负载部署&#xff0c;非常适合在较大规模的分布式系统中使用。接下来我们就以docker形式安装。 1.先安装docker环境 yum -y install…

移动端h5项目的兼容和适配问题

解决兼容性问题的关键在于对移动端产品的生存环境进行梳理&#xff0c;在此基础之上制定应对策略。 所谓生存环境主要分为三个维度&#xff1a; 硬件环境&#xff0c;细分为品牌和机型&#xff0c;决定了屏幕大小、性能等硬件限制 操作系统&#xff0c;比如iOS6和iOS7&#xf…

四川玖璨电子商务有限公司:抖店运营攻略

抖店运营&#xff0c;是指在抖音平台上进行电商销售的一种新型商业模式。随着抖音平台越来越受到年轻人的喜爱和关注&#xff0c;抖店运营正变得越来越重要。那么&#xff0c;抖店运营应该如何做呢&#xff1f;我们来谈谈抖店运营的一些攻略。 第一&#xff0c;选对产品。选择…

什么是住宅ip,静态和动态怎么选?

上文我们介绍了数据中心代理&#xff0c;这次我们来介绍下住宅代理ip&#xff0c;住宅代理ip分类两种类型&#xff1a;静态住宅代理和动态住宅代理&#xff0c;他们有什么区别又能用在什么场景呢&#xff1f;我们先从他们是如何运作开始。 一、什么是住宅代理ip isp住宅代理i…

【java】【springboot】【idea】springboot项目pom.xml 灰色下划线

解决方案&#xff1a; 这里我们找到了原因&#xff0c;就是因为选择了Ignored Files导致pom.xml文件被设置在maven忽略文件清单中&#xff0c;所以我们将打勾的选项取消&#xff0c;点击Apply,然后点击OK

Spark 启动时,报JAVA_HOME is not set

文章目录 1、报错内容2、解决方式3、再次启动Spark集群 1、报错内容 Spark启动时报错&#xff1a; hadoop104: JAVA_HOME is not set2、解决方式 解决方式&#xff1a; 打开启动配置文件 cd /opt/module/spark-standalone/sbin/ vim spark-config.sh配置Java的环境变量 …

clickhouse一次异常排查记录

clickhouse中报错 关闭了自启动&#xff0c;删了status&#xff0c;重启了clickhouse还是报错 1&#xff0c;排查定时执行的脚本日志&#xff08;每小时第5分钟执行&#xff09; INSERT INTO quality0529.previously_reported_urls (url) SELECT url FROM quality0529.hourly_…

javacv基础02-调用本机摄像头并预览摄像头图像画面视频

引入架包&#xff1a; <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.5.5-1</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId…

null和undefined区别

1.undefined&#xff0c;表示无值。 比如下面场景&#xff1a; a. 变量被声明了&#xff0c;但是没有被赋值&#xff1b; b. 调用函数的时候&#xff0c;应该给函数传参却没有给函数传这个参数打印出来就是 undefined&#xff1b; c. 访问一个对象中没有的属性&#xff1b;…

Ribbon:listOfServers ,${variableName:defaultValue}

解释&#xff1a; 配置了address的地址,请求会走address&#xff0c;也就是http://127.0.0.1:8081&#xff0c;通常用户与别的后端服务进行联调设置为其本地服务的ip。 如果address的地址被注释掉&#xff0c;如下面所示&#xff0c;类似这样的占位符${variableName:defaultVa…

【Terraform学习】使用 Terraform 创建应用程序负载均衡器(Terraform-AWS最佳实战学习)

使用 Terraform 创建应用程序负载均衡器 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_elb 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_secret_key…

算法通关村第6关【白银】| 树的层次遍历问题

一、基本层次遍历问题 1.二叉树的层次遍历 思路&#xff1a;使用队列可以很好的保存遍历状态&#xff0c;出队将结点左右子结点入队&#xff0c;用size记录下一层的元素个数&#xff0c;这样就能区分出层了 class Solution {public List<List<Integer>> levelOr…

【数据结构】树与二叉树

文章目录 &#x1f340;树型结构&#x1f431;‍&#x1f464;什么是树型结构&#x1f431;‍&#x1f453;树型结构的概念&#x1f431;‍&#x1f3cd;树的表示形式&#x1f431;‍&#x1f409;树的应用 &#x1f333;二叉树&#x1f431;‍&#x1f464;二叉树的概念&#…

LLM-chatgpt训练过程

流程简介 主要包含模型预训练和指令微调两个阶段 模型预训练&#xff1a;搜集海量的文本数据&#xff0c;无监督的训练自回归decoder&#xff1b; O T P ( O t < T ) O_TP(O_{t<T}) OT​P(Ot<T​)&#xff0c;损失函数CE loss指令微调&#xff1a;在输入文本中加入…

Android获取手机已安装应用列表JAVA实现

最终效果: 设计 实现java代码: //获取包列表private List<String> getPkgList() {List<String> packages new ArrayList<String>();try {//使用命令行方式获取包列表Process p Runtime.getRuntime().exec("pm list packages");//取得命令行输出…

图数据库Neo4j学习五渲染图数据库neo4jd3

文章目录 1.现成的工具2.Neo4j JavaScript Driver3.neovis4.neo4jd34.1neo4jd3和neovis对比4.2获取neo4jd34.3neo4jd3的数据结构4.4Spring data neo4.4.1 定义返回数据格式4.4.1.1NeoResults4.4.1.2GraphVO4.4.1.3NodeVO4.4.1.4ShipVO 4.4.2 SDN查询解析4.4.2.1 Repo查询语句4.…

【Rust日报】2023-08-25 SDXL in Rust,AIGC狂喜!

Stable-Diffusion-XL-Burn&#xff1a;SDXL in Rust 在reddit上看到这个项目 Stable-Diffusion-XL-Burn ,它 是一个基于 Rust 的项目&#xff0c;将stable diffusion xl 移植到了 Rust 深度学习框架 burn 中。在reddit回帖上&#xff0c;已经有小伙伴在热情的尝试&#xff0c;还…