【需求】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. hbase数据备份或者容灾方案

    HBase的数据备份或者容灾方案有这几种:Distcp,CopyTable,Export/Import,Snapshot,Replication,以下分别介绍(以下描述的内容均是基于0.94.20版本 ...

  2. flink有什么优势值得大家这么热衷

    flink 通过实现了 Google Dataflow 流式计算模型实现了高吞吐.低延迟.高性能兼具实时流式计算框架. 同时 flink 支持高度容错的状态管理,防止状态在计算过程中因为系统异常而丢失 ...

  3. 集合ArrayList分析

    目录 ArrayList 描述 重要的对象 遍历使用 与Collection关系 ArrayList属性 扩展:什么是序列化 transient关键字解析 ArrayList构造方法 无参构造 int ...

  4. JAVA用递归来判断回文串

    用递归来判断回文串 思路: ①首先如果是空串,一个字符,则判断是回文串 ②若不满足①,则我们需要对字符串进行递归判断,我们会想到要用第一个字符和最后一个字符进行比较,若相同则,第二个和倒数第二个进行比 ...

  5. JavaScript之对象基础

    现实世界是由无数的事物或对象组成,事物都有各独特的属性和一些动作行为,一般我们可以通过事物的某些特征或行为动作描述它.JavaScript中也是如此,JavaScript对象是多个键值对的集合,键我们 ...

  6. elasticsearch 增删改查底层原理

    elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.预备知识 在对document的curd进行深度分析 ...

  7. 【数据结构与算法】--JavaScript 链表

    一.介绍 JavaScript 原生提供了数组类型,但是却没有链表,虽然平常的业务开发中,数组是可以满足基本需求,但是链表在大数据集操作等特定的场景下明显具有优势,那为何 JavaScript 不提供 ...

  8. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布

    作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...

  9. Nginx安装教程,ubuntu18.04

    本文介绍Nginx如何安装,操作系统为Ubuntu 18.04.   一.安装 (1)安装git 执行命令:“sudo apt-get install git”. (2)安装aptitude 执行命令 ...

  10. springboot 2.1.3.RELEASE版本解析.properties文件配置

    1.有时为了管理一些特定的配置文件,会考虑单独放在一个配置文件中,如redis.properties: #Matser的ip地址 redis.host=192.168.5.234 #端口号 redis ...