【需求】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. 阿里雷卷:Reactive 基金会的成立将对开发方式带来哪些影响?

    作者 | 赵钰莹 近日,Linux 基金会宣布成立 Reactive 基金会.对于 Reactive,各位开发者应该并不陌生,尤其是 Node.js 开发者,但真正了解并意识到这件事情对开发方式带来的 ...

  2. js操作cookie(创建、读取、删除)方法总结

    js操作cookie,可以通过开源的插件实现,方便快捷,兼容性好,同样也可以自己写: 此文主要介绍两个常用的插件: Js.cookie.js 和 jQuery.cookie.js 0.Js.cooki ...

  3. 阿里第二轮面试:手写Java二叉树

    阿里面试 现在很多公司在招聘开发岗位的时候,都会事先在招聘信息中注明面试者应当具备的知识技能,而且在面试的过程中,有部分对于技能掌握程度有严格要求的公司还会要求面试者手写代码,这个环节很考验面试者的基 ...

  4. java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序

    java静态代码块/静态属性.构造块.构造方法执行.main方法.普通代码块的顺序 这也是在笔试中的一个重要的考点,就有一个输出语句让你写出输出的结果. 理论知识: 静态代码块是:属于类的,在类加载时 ...

  5. mybatis-geneator

    一.简介 在使用mybatis时我们需要重复的去创建pojo类.mapper文件以及dao类并且需要配置它们之间的依赖关系,比较麻烦且做了大量的重复工作,mybatis官方也发现了这个问题, 因此给我 ...

  6. CDH5.16.1离线集成Phoenix

    1.安装环境 Centos 7.6 CDH 5.16.1 2.下载Phoenix所需的parcel包 3.上传parcel包到ClouderaManager server所在的节点上 /opt/clo ...

  7. Vue学习之vue属性绑定和双向数据绑定

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 线控性能比拼,MKZ与CRV作为自动驾驶开发平台的全面测评

    全球自动驾驶创业公司最主流的测试开发用车是林肯MKZ,这是因为其高性能高精度的线控能力表现,易于使用逆向工程实现改装,以及存在成熟的线控改造服务提供商AS和Dataspeed,共同为自动驾驶初创及辅助 ...

  9. ActiveMQ JMX使用

    一.说明 ActiveMQ使用过程中,可以使用自带的控制台进行相关的操作以及查看,但是当队列数相当多的时候,在查询以及整体的监控上,就可能相当的不便.所以可通过JMX的方式,进行MQ中队列相关指标的以 ...

  10. C++:Memory Management

    浅谈C++内存管理 new和delete 在C++中,我们习惯用new申请堆中的内存,配套地,使用delete释放内存. class LiF; LiF* lif = new LiF(); // 分配内 ...