承接上一次 温湿度传感器 获取传值、存入数据库 ,这偏文章主要增加了 客户端查询显示的功能 !
上一次博客链接:https://blog.csdn.net/cungudafa/article/details/85690998

导语:
我拿着之前的设计方案悠哉悠哉去做Python课程设计的答辩,然后被老师教育了一番→_→

  1. 数据转换小毛病: 获取传值和存入数据库没啥太大毛病(这里注意int进制格式转换时要求参数非负数;如果用 struct ,则不会影响)
  2. 设计过于简单: Python原意就是简化编程语言,获取传值和保存数据库就是两句代码可以解决的问题!如何把这两句代码完善丰富和做出花样就是本事了!老师给了两句话: 如果只有2句代码怎么报项目资金,一大段代码才好报账! 我好像明白了什么?
  3. 关于界面问题: 老师提到应做出 查询界面 ,按关键词搜索供用户使用!我争辩:获取实时传值传回数据库是我们的工作,不需要界面。老师说: 客户角度 考虑,客户不会使用控制台和MySQL!
  4. C/S客户端查询: 先梳理一下本次实验所用到的设备: 1 温湿度传感器、2 我的PC端附带本地Mysql进行全部数据存储(假设这是一个巨大的私密数据库:充当Server服务器,可以对全部数据进行操作)、3 任意电脑的客户端(用户:将访问我的PC,输入关键词,获取查询结果并显示,这里:用户不能直接对数据进行操作!相当于一层加密~)这里是相当难理解了?,后文详解

目录

  • 一、总流程框图及各部分作用表
  • 二、总项目结构
  • 三、具体代码实现
    • 1. 基于Mysql数据库的创建
    • 2. 获取传值并存入数据库
    • 3. 查询

一、总流程框图及各部分作用表

设备 作用
1 温湿度传感器 采集信息并返回到总服务器归档
2 Server总服务器 获取传值、存入数据库(拥有读写最高权限)
3 Client客户端 关键词查询
4 可视化服务器 连接Client和Server的桥梁(对数据库直接访问权限的加密保护)

二、总项目结构

Tips:这里不在 _init _下写入代码是因为,调用整个包时, _init _中的内容会自动运行。

三、具体代码实现

1. 基于Mysql数据库的创建

2. 获取传值并存入数据库

mysql.py

#!/usr/bin/env python3
# -*- coding:utf-8 -*-import socket
import codecs
import time
import datetime
import pymysql#=========连接数据库=============
con = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='wy123456',db='python_windu',charset='utf8'
)
cur = con.cursor()  # 定义一个游标,通过游标来操作数据库
print("1、正在连接:")
#==================获取传值=======================
sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print(sk)
print("2、正在获取传值:")
address = ('10.1.156.82', 8001)
sk.connect(address)
while True:inp = "030300000002c5e9"  # 请求码time.sleep(3)sk.send(codecs.decode(inp, 'hex'))data = sk.recv(1024)print("3、接受到的数据:")print(data)#==十六进制转intsd = codecs.encode(data[3:5], 'hex')  # 16进制读取data第3到第5个数的值sd = int(sd, base=16) / 100     # 16进制转10进制保留两位小数,int类型wd = codecs.encode(data[5:7], 'hex')wd = int(wd, base=16) / 100print("4、处理后的数据:")print("湿度:%s,温度:%s" % (sd, wd))now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # strftime格式化时间函数print("5、成功保存到数据库中!")#==插入到数据库中cur.executemany("INSERT pytest VALUE(%s,%s,%s)", [(now_time, str(wd), str(sd))])  # int转strcon.commit()print("6、显示数据库内容:")print("----------------------------------------")#===读取数据库打印表格sql = """ SELECT * FROM pytest """results = cur.fetchall()file = r"wendu.txt"fp = open(file, "w")fp.write("     温湿度传感器表1\n")fp.write("-----------------------------------\n")fp.write("时间" + "\t\t\t\t" + "温度" + "\t" + "湿度" + "\n")sum = 0  # 统计已录入数据次数try:# 执行SQL语句cur.execute(sql)# 获取所有记录列表results = cur.fetchall()print("       温湿度传感器表 ")print("-----------------------------\n")print("时间                                    温度           湿度\n")for it in results:fp.write(it[0] + "\t\t")fp.write(it[1] + "\t")fp.write(it[2] + "\n")for i in range(len(it)):print(it[i], end='    ')sum += 1print("\n")print("-----------------------------\n")print("    统计:(" + str(sum) + ")条记录\n")fp.write("------------------------------------\n")fp.write("总计:%d条记录\n" % sum)fp.close()except:print("未查询到数据")
sk.close()

在同目录下创建一个txt:用于备份全部数据库的内容,防删库跑路!

存入结果:

3. 查询

流程图:

项目结构:

Client端
Client.py

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 用户端
import socket
#ip_addr = input('请输入对方IP地址:').strip()
client = socket.socket()
client.connect(("192.168.43.241", 9999))def menu():print("\n      用户界面  ")print("----------------------")print("  1、查询全部数据           ")print("  2、关键词查询              ")print("  3、退出                        ")print("----------------------")while True:menu()print("请输入(1~3)")msg = input('>>:').strip()if len(msg) == 0:continueclient.send(msg.encode('utf-8'))data_sure = client.recv(1024)print(data_sure.decode())
client.close()

Server端
Server.py

#!/usr/bin/env python3
# -*- coding:utf-8 -*-# 服务器端
import socket
import codecs
import time
import datetime
import pymysqldata = 0con = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='wy123456',db='python_windu',charset='utf8'
)
cur = con.cursor()  # 定义一个游标,通过游标来操作数据库sum = 0
sql_msg = []def fun1():  # 遍历数据库#sql_msg.append("       温湿度总数据表 ")# sql_msg.append("-----------------------------\n")#sql_msg.append("时间                                    温度           湿度")try:# 执行SQL语句sql = """ SELECT * FROM pytest """cur.execute(sql)results = cur.fetchall()sql_msg.append(results)'''for it in results:for i in range(len(it)):sql_msg.append(it[i], end='    ')sql_msg.append("\n")sum += 1sql_msg.append("    统计:(" + str(sum) + ")条记录\n")'''cur.close()con.close()except:sql_msg.append("未查询到数据")passdef fun2():  # 输入关键词查询sql_msg.append("请输入关键词(温度):")print("客户端操作:2查询")#key = input(">>>")key = datasql_wendu = "SELECT * FROM pytest where wendu like '%" + str(key) + "%' "#sql_shidu = "SELECT * FROM pytest where shidu like '%" + str(key) + "%' "#sql_time = "SELECT * FROM pytest where time like '%" + str(key) + "%' "try:cur.execute(sql_wendu)results1 = cur.fetchall()sql_msg.append(results1)'''sql_msg.append("查询结果:")sql_msg.append("-----------------------------\n")sql_msg.append("时间                                  温度           湿度\n")for it in results1:for i in range(len(it)):sql_msg.append(it[i], end='    ')sql_msg.append("\n")'''cur.close()con.close()except:sql_msg.append("关键词有误,请重新输入!")def fun3():  # 退出程序print("客户退出程序!")exit(0)# 自己定义的用来实现switch-case的方法
def function(x):swicher = {  # 定义一个map,相当于定义case:func()'1': fun1,'2': fun2,'3': fun3,'4': lambda: print('default function')}func = swicher.get(x, '4')  # 从map中取出方法return func()  # 执行def menu():print("\n      用户界面  ")print("----------------------")print("  1、查询全部数据           ")print("  2、关键词查询              ")print("  3、退出                        ")print("----------------------")while True:# menu()#cmd = input('请输入(1~3) : ')# function(cmd)server = socket.socket()server.bind(('192.168.43.241', 9999))server.listen(5)print('等待客户连接...')conn, addr = server.accept()try:data = conn.recv(10240)  # 接收数据print('IP为:' + addr[0] + '向您发来消息:', data.decode())function(data.decode())conn.send(str(sql_msg).encode('utf-8'))except ConnectionResetError as e:print('客户端:%s 已经断开!' % addr[0])breakconn.close()server.close()

运行结果:
测试本地查询:


通过TCP通信传值查询: 采用TCP远程访问本机IP进行通信,接收用户查询的关键词;再由本机从数据库读取,sql_msg.append返回给用户


本次不足:
未加界面(图一:实时查询显示、图二:相似完整系统界面及配置)

Python温湿度传感器应用(二)基于pymysql温湿度表查询(C/S端)相关推荐

  1. Python温湿度传感器应用(一)_获取传值、传入本地数据库

    目录 一.准备 二.获取温湿度传感器的值 三.传入本地数据库中 四.打印成txt形式保存 一.准备 温湿度传感器的搭建(是我们老师搭建的平台,我们连接校网就可以读取了) 提示: 不用连接哆点,只要能连 ...

  2. python温湿度传感器源代码_在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)...

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  3. python温湿度传感器源代码_在树莓派上读取DHT11温湿度传感器python代码实现及常见问题(全面简单易懂)...

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

  4. Python爬虫实战之二 - 基于Scrapy框架抓取Boss直聘的招聘信息

    Python爬虫实战之三 - 基于Scrapy框架抓取Boss直聘的招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于 ...

  5. dht22温湿度传感器特点及使用介绍

    dht22温湿度传感器特点及使用介绍 前言 一.dht22温湿度传感器外观 二.连接图 三.相关参数讲解 1.引脚 2.温湿度测量范围 3.通讯方式(单总线数字信号) 4.优点 5.产品特性(根据官方 ...

  6. dht11温湿度传感器特点及使用介绍

    dht11温湿度传感器特点及使用介绍 前言 一.dht11温湿度传感器外观 二.原理图 三.相关参数讲解 1.引脚 2.温湿度测量范围 3.通讯方式(单总线数字信号) 4.优点 5.产品特性(根据官方 ...

  7. STM32F103使用硬件IIC驱动SHT30温湿度传感器

    文章目录 前言 一.SHT30温湿度传感器原理图 二.代码部分 1.SHT30.c文件 2.SHT30.h文件 总结 前言 SHT30是一种常见的温湿度传感器,该传感器广泛应用于各种场景,小米的温湿度 ...

  8. 【逗老师带你学IT】PRTG监控通过Python+Modbus RTU获取温湿度传感器数据

    前文[逗老师带你学IT]PRTG监控通过Python+TCP Modbus获取温湿度传感器数据中我们讲了如何通过Python读取支持TCP Modbus的传感器数据.本章我们讲解下如何读取Modbus ...

  9. 【逗老师带你学IT】PRTG监控通过Python+TCP Modbus获取温湿度传感器数据

    本文介绍,Python如何通过TCP Modbus协议获取温湿度传感器数据.并在PRTG监控系统中呈现. 本文主要涉及知识点: 1.Python的ModbusTCP客户端实现 2.常见温湿度传感器中, ...

最新文章

  1. 关于“习惯”的精彩分析
  2. 自考计算机毕业论文答辩视频,过来人谈自考毕业论文答辩有感
  3. java调用通用对话框,利用Java Swing设计通用对话框
  4. android camera 竖直拍照 获取竖直方向照片 做缩放处理
  5. oa系统服务器到国外,oa系统放到云服务器云服务器
  6. 从零学iFIX视频教程 2.01版 完整目录 (总共220节视频)
  7. 计算机硬盘驱动器检查失败,如何修复Windows 10上未显示外部硬盘驱动器/未检测到问题...
  8. TR转TO L_TO_CREATE_TR
  9. 如何在win7下安装XP系统?
  10. 4、web(js):js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法
  11. ​机器如何“猜你喜欢”?深度学习模型在1688的应用实践
  12. 双足机器人课设报告_双足竞步机器人-智能步行者设计-技术报告
  13. 计算机电脑照片大小,电脑上怎么调整照片kb
  14. CameraCaptureSession
  15. RPM软件安装包-rpm指令操作
  16. Python绘制简单的曲线图·
  17. 导入EXCEL表时,提示找不到可安装的ISAM怎么办
  18. 怎样避免无意识偏见_精神病学意识到大数据和人工智能的价值和偏见
  19. 做视频剪辑工作赚钱吗?
  20. ffmpeg视频播放过程

热门文章

  1. UE4无尽跑酷游戏制作杂记之二
  2. 项目 : 预测波士顿房价_团结波士顿更新:早鸟票销售将于明天结束。 部分时间表到了!
  3. 记一篇IT培训日记012-连坐
  4. Pgsql批量更新数据
  5. 迅雷是国内最大的云加速服务提供商
  6. 蓝桥杯Web组备赛笔记4
  7. svn 被锁住 冲突 Can‘t revert without reverting children
  8. 柔性制造方式的建立(zt)
  9. MD61计划独立需求导入BAPI【按日维度/动态模板/动态字段】
  10. cad线性标注命令_CAD线性标注快捷键DLI,CAD标注快捷键大全