使用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()