简介

上一篇简单说了下数据的实时显示和曲线的生成,数据最终是要被记录的,所以也就涉及到了数据库的使用,Python下面操作数据库的库很多,这里介绍一个使用比较广泛的库-PyMySQL
PyMySQL

MySQL在本机上的配置

下载

MySQL 官网下载链接下载,选择自己的系统的 mysql,windows直接选择下图中打框这个
image.png

安装

解压到随便一个盘的根目录,建立环境变量

此电脑 -> 右键属性 -> 高级系统设置 -> 环境变量 ->Path-> 编辑 -> 新建填入 bin 目录的路径 -> 确定

我的目录如下

C:\mysql\bin

不会的可以百度查,一查一大堆

配置ini文件

C:\mysql\下面建立一个my.ini文件,里面的内容如下

  1. [mysqld]
  2. # skip-grant-tables
  3. # 设置3306端口
  4. port=3306
  5. # 设置mysql的安装目录
  6. basedir=C:\mysql # 有些电脑需要用双斜线\\ =====================这里要改成自己的
  7. # 设置mysql数据库的数据的存放目录
  8. datadir=C:\mysql\Data # 此处同上 =====================这里要改成自己的
  9. # 允许最大连接数
  10. max_connections=200
  11. # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
  12. max_connect_errors=10
  13. # 服务端使用的字符集默认为UTF8
  14. character-set-server=utf8
  15. # 创建新表时将使用的默认存储引擎
  16. default-storage-engine=INNODB
  17. # 默认使用“mysql_native_password”插件认证
  18. default_authentication_plugin=mysql_native_password
  19. [mysql]
  20. # 设置mysql客户端默认字符集
  21. default-character-set=utf8
  22. [client]
  23. # 设置mysql客户端连接服务端时默认使用的端口
  24. port=3306
  25. default-character-set=utf8

初始化数据库

用管理员打开 cmd,进入 mysql 的 bin 目录,输入下面代码:

  1. mysqld --initialize --console

运行成功后,记下 password is generated for root@localhost: 后面的初始密码,一定要记住,要不很麻烦

安装 MySQL 服务

同样在 cmd 的 bin 路径下,输入如下代码:

  1. mysqld --install

至此就安装完事了

MySQL 服务相关操作

  1. net start mysql #启动服务
  2. mysql -u root -p #登录 密码就输入之前让你记住的,记不住的看重置密码章节

进入MySQL的界面后(其实就是命令行)

  1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; #重置密码

重置密码(希望没人看到这)

创建文件mysql-init.txt

  1. USE mysql;
  2. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  3. FLUSH PRIVILEGES;

然后启动服务

  1. net start mysql #启动服务

之后在任务管理器中结束掉mysqld.exe的进程,之后在windows的服务中启动mysql的服务

  1. mysql -u root -p

此处的密码就是你那个mysql-init.txt文件中创建的,我也不知道为啥这么做,我只不过国内国外网站查了一圈,这样做立刻成功

vscode端配置

vscode端没什么好说的,直接装个扩展就行
MySQL
装上后看两下就会了,没什么好说的

代码

SQL类

我把整个SQL的操作写成了一个类,里面建了几个方法
定义一个DBConnection的类,继承自object
image.png

  • getConnection方法

image.png

  • isTableExist方法

此方法通过fetchall将数据库中的表取出,取出的表是字典的列表格式,所以需要迭代出每个字典,在取出字典中的值,这个值就是表的名称,使用in方法可以判断表是否存在于数据库中
image.png

  • createTable方法

创建表方法,其实就是执行一大段SQL命令

  1. CREATE TABLE snap7(id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  2. dateTime DATETIME,
  3. temperature FLOAT,
  4. flow FLOAT,
  5. pressure FLOAT,
  6. oxygen FLOAT,
  7. dust FLOAT)
  8. ENGINE = InnoDB
  9. DEFAULT CHARSET = utf8
  10. COLLATE = utf8_bin
  11. AUTO_INCREMENT = 1;

image.png

  • createDataRow方法

此方法有一个参数,这个参数是个元组,把需要的数据写到元组里当做参数调用就行,不管你插入的数据类型是啥,在这里全是%s
image.png
测试一下
创建一个DBconnection实例,之后就可以插入数据了,第一个ID因为是递增的,可以给个0,这样数据库就可以自己生成ID号.
使用strftime按照给定的格式格式化一下日期时间,之后插入进去
image.png
插入后就这样
image.png

在之前的代码中调用

之前通过PLC获取的数值是一个列表的形式,而且也没有ID和日期时间,所以需要新建一个列表,append上ID和日期时间,再把列表中的PLC数据传进去,使用tuple方法转成元组,使用createDataRow方法定时插入就OK了
image.png
插入的样子
image.png

代码下载

见前文