使用pymysql对mysql进行数据插入

前言

在写上位机代码时候,需要将采集的数据存入数据库中。这里进行了简单的研究(因为表涉及2张,此外创建表也研究了会)特记录下。

这里有组数据需要存入表中,表结构为一个主表一个从表

2张表的DDL

-- AS01.sensor_test definition
​
CREATE TABLE `sensor_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `test_mode` varchar(100) NOT NULL,
  `test_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
​
-- AS01.test_database definition
​
CREATE TABLE `test_database` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `angle` float DEFAULT NULL,
  `voltage` float DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `test_database_FK` (`pid`),
  CONSTRAINT `test_database_FK` FOREIGN KEY (`pid`) REFERENCES `sensor_test` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
​

python语句

import pymysql
conn = pymysql.connect(# 这里需要填入你自己数据的信息
    host='your_host_name',
    user='your_user_name',
    password='your_password', 
    database='AS01' # 操作的表名
)
​
cursor = conn.cursor()
​
test_mode = '5'
sql = "INSERT INTO sensor_test (test_mode) VALUES (%s)"
val = [test_mode]
cursor.execute(sql, val)
​
# 获取新插入的数据的id
new_id = cursor.lastrowid
​
# 插入数据到从表
data = [[1, 2.3], [2, 3.3], [3, 4.4]]
for row in data:
    sql = "INSERT INTO test_database (pid, angle, voltage) VALUES (%s, %s, %s)"
    val = [new_id] + row
    cursor.execute(sql, val)
​
# 提交更改并关闭连接
conn.commit()
cursor.close()
conn.close()

运行后,数据库数据如下:

简单测试下:

SELECT * FROM AS01.test_database WHERE pid = 3 

PS:
存入后,为了方便其他客户查看数据,需要把存入的数据保存成表格使用


import pandas as pd
import pymysql

# 连接数据库
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='123456',
    database='AS01'
)

# 查询数据
sql = "SELECT * FROM AS01.test_database WHERE pid = 3"
df = pd.read_sql(sql, conn)

# 写入CSV文件
df.to_csv('data3.csv', index=False)

# 关闭连接
conn.close()

posted @ 2023-06-09 11:13  重拾初心的青年人  阅读(415)  评论(0编辑  收藏  举报