【需求】1. 在数据库中创建表,且能按时间自动创建新表 2. 数据写入数据库 3. 从数据库读取数据

1. 创建表,并自动更新

 def Creat_Table(InitMySQL,tabel_name):
# 创建游标
cursor = InitMySQL.cursor()
sql = "create table if not exists " + tabel_name + "(dTime datetime not null comment '时间'," \
"dElectric_uA int not null comment '电流'," \
"dDistance int not null comment '距离'," \
"dWarning int not null comment '报警')"
# 打印sql
print(sql)
cursor.execute(sql)
# 关闭游标
cursor.close()

需要输入数据库的连接对象和表名称,sql根据表名称判断数据库中是否存在该表,如果存在则不会创建,不存在则创建新表

tabel_name 可以根据时间创建

2. 向数据库中写入数据

根据创建的数据库中表的类型进行数据填充

 def Write_to_MySQL(InitMySQL,tabel_name, CurrentTime, Electric_uA, Distance, WaringStatus):
# 创建游标
cursor = InitMySQL.cursor()
# #创建sql
# w_table_name = 'warning' + day_time
sql = 'insert into '+ tabel_name+ ' values (%s, %s, %s, %s)'
print(sql)
result = cursor.execute(sql,(CurrentTime, Electric_uA, Distance, WaringStatus))
if result == 1:
pass
# print('添加成功!')
else:
print('添加数据失败!')
# 4. 操作成功提交事务
InitMySQL.commit()
# 关闭游标
cursor.close()

整体表的创建与数据输入

 import time
import datetime
import json
import pymysql # JSON 文件初始化
def InitJSON():
global filejson
try:
with open('TIE_LDY_20190923_1502.json', 'r') as f:
filejson = json.load(f)
except FileNotFoundError:
print('无法打开指定的文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!') # 数据库参数初始化
def MysqlInit():
# global LiuCaoSQL
# 1. 创建数据库连接对象
InitMySQL = pymysql.connect(host=filejson['MysqlInit']['host'], port=filejson['MysqlInit']['port'],
database=filejson['MysqlInit']['database'], charset=filejson['MysqlInit']['charset'],
user=filejson['MysqlInit']['user'], password=filejson['MysqlInit']['password'])
return InitMySQL def Creat_Table(InitMySQL,tabel_name):
# 创建游标
cursor = InitMySQL.cursor()
# # 获取当前时间 年-月-日
# day_time = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M")
# # 拼接table名称
# tabel_name = 'warning' + day_time
# 创建sql语句 创建列表的表头 注意表的类型create table if not exists tablename
sql = "create table if not exists " + tabel_name + "(dTime datetime not null comment '时间'," \
"dElectric_uA int not null comment '电流'," \
"dDistance int not null comment '距离'," \
"dWarning int not null comment '报警')"
# 打印sql
print(sql)
cursor.execute(sql)
# 关闭游标
cursor.close() # 向数据库写入内容
def Write_to_MySQL(InitMySQL,tabel_name, CurrentTime, Electric_uA, Distance, WaringStatus):
# 创建游标
cursor = InitMySQL.cursor()
# 获取当前时间 年-月-日
# day_time = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M")
# #创建sql
# w_table_name = 'warning' + day_time
sql = 'insert into '+ tabel_name+ ' values (%s, %s, %s, %s)'
print(sql)
result = cursor.execute(sql,(CurrentTime, Electric_uA, Distance, WaringStatus))
if result == 1:
pass
# print('添加成功!')
else:
print('添加数据失败!')
# 4. 操作成功提交事务
InitMySQL.commit()
# 关闭游标
cursor.close()
def main():
# 初始化JSON 和数据库
InitJSON()
InitMySQL = MysqlInit()
# 测试数据库创建 表
# Creat_Table(InitMySQL)
# 测试写入数据
Electric_uA = 1000
Distance = 1000
WaringStatus = 0
i= 0
while(i < 10000):
# 获取当前时间 年-月-日
day_time = datetime.datetime.now().strftime("%Y_%m_%d_%H_%M")
# 拼接table名称
tabel_name = 'warning' + day_time
# 测试数据库创建 表
Creat_Table(InitMySQL,tabel_name)
i += 1
CurrentTime = datetime.datetime.now().strftime("%Y_%m_%d %H:%M:%S")
Electric_uA -= 1
Distance += 1
Write_to_MySQL(InitMySQL, tabel_name, CurrentTime, Electric_uA, Distance, WaringStatus)
time.sleep(0.01)

测试的数据库结果:

3. 从数据库读取数据

 """
【函数功能】 读取数据库中最新的几分钟数据
【输入】 需要查询的table名称(也可以从JSON中读取)
【输出】 查找的数据列表
"""
def Read_from_Mysql(InitMySQL, sql_tabel_name):
# 从JSON中读取sql需要的参数
set_time = filejson['MysqlInit']['set_delaytime_min']
now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
last_time = (datetime.datetime.now() - datetime.timedelta(minutes = set_time)).strftime("%Y-%m-%d %H:%M:%S")
# sql_tabel_name = filejson['MysqlInit']['sql_tabel_name']
sql_distance_header = filejson['MysqlInit']['distance_header']
sql_time_header = filejson['MysqlInit']['time_header']
# 创建游标
cursor = InitMySQL.cursor()
sql = "SELECT " + sql_distance_header + " FROM " + sql_tabel_name + " WHERE " + sql_time_header \
+ "<'" + now_time + "'" + " and " + sql_time_header + ">'" +last_time + "'"
# print(sql)
cursor.execute(sql)
# 获取该字段下的数据
result = cursor.fetchall()
# 关闭游标
cursor.close()
# 将数据转换成列表
new_distance= []
for dis in result:
new_distance.append(dis[0])
return new_distance

【重点】sql的字符串拼接中可以加入变量 时间需要用单引号引起来

园中有博主写的关于数据库,非常详细 可以参考 https://www.cnblogs.com/hackerer/p/11588717.html

Python_MySQL数据库的写入与读取的更多相关文章

  1. 我们知道写入过程比ZooKeeper集合中的读取过程要贵,因为所有节点都需要在数据库中写入相同的数据。因此,对于平衡的环境拥有较少数量(例如3,5,7)的节点比拥有大量的节点要好。

    我们知道写入过程比ZooKeeper集合中的读取过程要贵,因为所有节点都需要在数据库中写入相同的数据.因此,对于平衡的环境拥有较少数量(例如3,5,7)的节点比拥有大量的节点要好. 组件 描述 写入( ...

  2. php 如何写入、读取word,excel文档

    如何在php写入.读取word文档 <? //如何在php写入.读取word文档 // 建立一个指向新COM组件的索引 $word = new COM("word.applicatio ...

  3. mysql千万级数据库插入速度和读取速度的调整记录

    一般情况下mysql上百万数据读取和插入更新是没什么问题了,但到了上千万级就会出现很慢,下面我们来看mysql千万级数据库插入速度和读取速度的调整记录吧. 1)提高数据库插入性能中心思想:尽量将数据一 ...

  4. 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取

    装饰者模式的学习(c#) 案例转自https://www.cnblogs.com/stonefeng/p/5679638.html //主体基类 using System;using System.C ...

  5. 从HDFS的写入和读取中,我发现了点东西

    摘要:从HDFS的写入和读取中,我们能学习到什么? 本文分享自华为云社区<从HDFS的写入和读取中,我们能学习到什么>,作者: breakDawn . 最近开发过程涉及了一些和文件读取有关 ...

  6. PHP往mysql数据库中写入中文失败

    该类问题解决办法就是 在建立数据库连接之后,将该连接的编码方式改为中文. 代码如下: $linkID=@mysql_connect("localhost","root&q ...

  7. java一行一行写入或读取数据

    原文:http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html 假如E:/phsftp/evdokey目录下有个evdokey_2 ...

  8. iOS中plist的创建,数据写入与读取

    iOS中plist的创建,数据写入与读取 Documents:应用将数据存储在Documents中,但基于NSuserDefaults的首选项设置除外Library:基于NSUserDefaults的 ...

  9. 将raw里面的数据库文件写入到data中

    package com.city.list.db; import java.io.File; import java.io.FileNotFoundException; import java.io. ...

随机推荐

  1. openresty域名动态解析

    工作中使用openresty,使用第三方服务API通过域名访问.但是,域名通过DNS解析出来之后,在openresty是有 配置解析阶段 很多时候我们会在 Nginx 配置文件里配置上一些域名,比如配 ...

  2. Unity3D_05_理解Unity的新GUI系统(UGUI)

    理解Unity的新GUI系统(UGUI) Unity GUI 链接:UnityEngine.UI系统基础类架构图  Unity GUI 链接:UnityEngine Event & Event ...

  3. windows安装mingw和LuaJIT

    1,安装mingw64 先下载mingw64压缩包(不建议下载exe安装包,在线安装太慢),地址如下: https://nchc.dl.sourceforge.net/project/mingw-w6 ...

  4. maven下载jar包源码配置

    两个依赖,就想下mail的源码包,因该怎么 <dependencies> <dependency> <groupId>javax.mail</groupId& ...

  5. Android系统修改之Email自动回复功能分析

    1. Email添加自动回复功能需要注意事项 Email可能存在多个账户, 因此自动回复功能应该添加在账户设置里面, 自动回复针对一个账户单独处理 在Email账户设置里面, 开启自动回复功能的时, ...

  6. 【JVM学习】2.Java虚拟机运行时数据区

    来源: 公众号: 猿人谷 这里我们先说句题外话,相信大家在面试中经常被问到介绍Java内存模型,我在面试别人时也会经常问这个问题.但是,往往都会令我比较尴尬,我还话音未落,面试者就会"背诵& ...

  7. 深入解析 Kubebuilder:让编写 CRD 变得更简单

    作者 | 刘洋(炎寻) 阿里云高级开发工程师 导读:自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubern ...

  8. JavaScript之JSON&AJAX

    今天为大家讲解JavaScript中非常流行的数据传输形式JSON和异步技术AJAX技术. 一 JSON JSON的全称是JavaScript Object Notation(js对象表示法),它是一 ...

  9. ActiveMQ消息选择器Selector

    一.前言 消息发送到Broker,消费者通过Destination可以订阅消费某个特定的通道内的消息.一些特殊情况下,需要消费者对消息过滤下再进行消费,也就是筛选出某些特定消息.ActiveMQ提供了 ...

  10. WinServer 2012 R2 安装python3.6时出现错误:0x80240017 导致安装失败

    解决方法: 依次检查并更新补丁:KB2919442,KB2919355,kb2999226 KB2919442:https://www.microsoft.com/zh-cn/download/det ...