暑期实习总结(焊点数据管理软件开发):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.rhkb.cn/news/111664.html

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

相关文章

java八股文面试[多线程]——synchronized 和lock的区别

其他差别&#xff1a; synchronized是隐式的加锁,lock是显式的加锁; synchronized底层采用的是objectMonitor,lock采用的AQS; synchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列; synchronized使用了object类的wait和noti…

博流RISC-V芯片BL616开发环境搭建

文章目录 1、工具安装2、代码下载3、环境变量配置4、下载交叉编译器5、编译与下载运行6、使用ninja编译 本文分别介绍博流RISC-V芯片 BL616 在 Windows和Linux 下开发环境搭建&#xff0c;本文同时适用BL618&#xff0c;BL602&#xff0c;BL702&#xff0c;BL808系列芯片。 1、…

迁移学习:实现快速训练和泛化的新方法

文章目录 迁移学习的原理迁移学习的应用快速训练泛化能力提升 迁移学习的代码示例拓展应用与挑战结论 &#x1f389;欢迎来到AIGC人工智能专栏~迁移学习&#xff1a;实现快速训练和泛化的新方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博…

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中&#xff0c;管道是一条不间断的字节流&#xff0c;用来实现程序或进程间的通信&#xff0c;或读写外围设备、外部文件等。 一个流&#xff0c;必有源端和目的端&#xff0c;它们可以是计算机内存的…

怎么初始化磁盘?这个方法你绝对不知道

在计算机的日常使用中&#xff0c;硬盘扮演着重要的角色&#xff0c;储存着操作系统、文件、程序等重要数据。然而&#xff0c;当我们获得一个新的硬盘或者需要对现有硬盘进行重新配置时&#xff0c;初始化磁盘成为了一个关键步骤。本文将介绍两种常用的初始化磁盘方法&#xf…

STM32F4X 窗口看门狗 WWDG

STM32F4X 窗口看门狗 WWDG STM32F4X窗口看门狗使用独立看门狗与窗口看门狗区别窗口看门狗复位条件窗口看门狗时钟窗口看门狗时钟计数频率窗口看门狗的窗口值窗口看门狗喂狗操作窗口看门狗例程 上一节简单讲了STM32F4X中的独立看门狗的使用&#xff0c;除了独立看门狗之外&#…

Java 中数据结构HashMap的用法

Java HashMap HashMap 是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 HashMap 实现了 Map 接口&#xff0c;根据键的 HashCode 值存储数据&#xff0c;具有很快的访问速度&#xff0c;最多允许一条记录的键为 null&#xff0c;不支持线程同步。 HashMap 是…

我与GPT的一次关于Orb-SLAM3源码(包括2)的深入对话

目录 一、前言二、关于Orb-SLAM3的代码结构三、关于system3.1 关于摄像头初始化3.2 关于摄像头模型化3.2关于初始化 四、关于ORBVocabulary五、关于优化六、小结 一、前言 Orb-SLAM2或者3是一个开源的视觉SLAM框架&#xff0c;里面的一些思想&#xff0c;一些软件工程的设计理…

ssm会议管理系统源码和论文

ssm会议管理系统源码和论文087 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&…

[C/C++]天天酷跑游戏超详细教程-上篇

个人主页&#xff1a;北海 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C/C&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家一起学习交流&#xff01;&#x1f9…

Stable Diffusion Web UI的原理与使用

Stable Diffusion是一套基于Diffusion扩散模型生成技术的图片生成方案&#xff0c;随着技术的不断发展以及工业界对这套工程细节的不断优化&#xff0c;使其终于能在个人电脑上运行&#xff0c;本文将从github下载开始讲一讲如何使用Stable Diffusion Web UI进行AI图像的生成。…

摄像头的调用和视频识别

CV_tutorial3 摄像头调用实时播放保存视频 运动目标识别帧差法背景减除法 摄像头调用 创建视频捕捉对象&#xff1a;cv2.VideoCapture() 参数为视频设备的索引号&#xff0c;就一个摄像投的话写0默认&#xff1b; 或者是指定要读取视频的路径。 实时播放 import cv2 import …

华硕笔记本摄像头倒置怎么办?华硕笔记本摄像头上下颠倒怎么调整

笔记本电脑相较于台式电脑&#xff0c;更易携带&#xff0c;解决了很大一部分人的使用需求。但是笔记本电脑也存在很多不足&#xff0c;比如华硕笔记本电脑就经常会出现摄像头倒置的错误&#xff0c;出现这种问题要如何修复呢&#xff1f;下面就来看看详细的调整方法。 华硕笔记…

十二、集合(2)

本章概要 添加元素组集合的打印列表 List 添加元素组 在 java.util 包中的 Arrays 和 Collections 类中都有很多实用的方法&#xff0c;可以在一个 Collection 中添加一组元素。 Arrays.asList() 方法接受一个数组或是逗号分隔的元素列表&#xff08;使用可变参数&#xff…

【STM32】学习笔记-江科大

【STM32】学习笔记-江科大 1、STM32F103C8T6的GPIO口输出 2、GPIO口输出 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口可配置为8种输入输出模式引脚电平&#xff1a;0V~3.3V&#xff0c;部分引脚可容忍5V输出模式下可控制端口输出高低电平&#…

【GPT,Flask】用Python Flask结合OpenAI的GPT API构建一个可自主搭建的内容生成应用网站

【背景】 自己构建模型并进行训练需要很高的知识,技能和资源门槛。如今,通过OpenAI提供的API,则可以快速通过GPT能力构建可以提供内容生成服务的在线网站。这套框架可以提供给用户,用户可以利用该框架在自己的环境(比如自己的公司内)构建内容生成服务。你也可以自己上线…

以“迅”防“汛”!5G视频快线筑牢防汛“安全堤”

近期&#xff0c;西安多地突发山洪泥石流灾害。防洪救灾刻不容缓&#xff0c;为进一步做好防汛工作&#xff0c;加强防洪调度监管&#xff0c;切实保障群众的生命财产安全&#xff0c;当地政府管理部门亟需拓展智能化技术&#xff0c;通过人防技防双保障提升防灾救灾应急处置能…

Python基础小讲堂之条件分支与循环

万丈高楼平地起&#xff0c;今天给大家讲讲python中的&#xff1a;条件分支与循环。在学条件分支与循环之前&#xff0c;先掌握一下python的基本操作符。算术操作符&#xff1a; - * / % ** //对于算数操作符的前四个加减乘除&#xff0c;大家都懂&#xff0c;在py…

趣解建造者模式之网红小王购车记

一、前言 本文章是关于设计模式中的建造者模式的&#xff0c;也称构建者模式/生成器模式&#xff0c;英文我们称之为Builder Pattern。在开展讲解之前&#xff0c;我们先把该模式的定义了解一下。 建造者模式的定义&#xff1a; 该模式可以实现产品的封装构造过程&#xff0c…

浅谈视频汇聚平台EasyCVR中AI中台的应用功能

AI中台是将人工智能技术如深度学习、计算机视觉、知识图谱、自然语言理解等模块化&#xff0c;集约硬件的计算能力、算法的训练能力、模型的部署能力、基础业务的展现能力等人工智能能力&#xff0c;结合中台的数据资源&#xff0c;封装成整体中台系统。 在EasyCVR视频共享融合…