0%

Python生成数据插入数据库

智能眼镜的网页端需要生成测试数据,先尝试一下生成随机数据,再试着尽量把数据做得合理一些。

phpMyAdmin 是一种 MySQL数据库前台的基于PHP的工具。

pymysql是用来连接python和mysql之间的通道,在使用python编程时,通过它来和mysql数据库进行交互。

安装pymysql模块:在终端输入pip install pymysql

此次只向data_series表中生成数据。data_series中的字段有user_id,date,distance,lux和angle。use_login表中,目前只有id为3,6,25三位用户,user_id要满足这一限制。

np.random.randn(n)该函数返回一个样本,有n个数,具有标准正态分布。

打算先以15min为间隔,生成一整天的数据,因此每次随机产生的应该有96个数据。从distance入手,想要的是在[5,200]之间正态分布的96个整数。

为了生成正态分布,需要载入包为scipy统计包中的norm

1
from scipy.stats import norm

没有的话还是要先安装:pip install scipy

调出来生成的数据还算正常的distance:

1
2
3
distance = r.uniform((5-40)/10, (200-40)/10)
distance = norm.rvs(distance, size=120)
distance = distance*10+40

利用pandas生成等间隔时间:96个时间,间隔为900s

1
dateTime = pd.date_range('2019-9-10 00:00:00', periods=96, freq='900s')

连接数据库时,pycharm报错:”Lost connection to MySQL server during query“,是因为我把端口号写错了,MySQL使用的端口号为3306

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import random as r
from scipy.stats import norm
import pandas as pd
import pymysql

userId = (3, 6, 25)
dateTime = pd.date_range('2019-9-10 00:00:00', periods=96, freq='900s')

distance = r.uniform((5 - 40) / 10, (200 - 40) / 10)
distance = norm.rvs(distance, size=120)
distance = distance * 10 + 40

lux = r.uniform((30 - 720) / 770, (25000 - 720) / 770)
lux = norm.rvs(lux, size=120)
lux = lux * 770 + 700

angle = r.uniform(-45 / 10, 45 / 10)
angle = norm.rvs(angle, size=120)
angle = angle * 10

conn = pymysql.connect(host='127.0.0.1', port=3306, db='ahri', user='root', password='', charset='utf8')
cur = conn.cursor()

for i in range(96): # 插入数据
tmpId = r.choice(userId) # 在列表中随机取一个
print(tmpId, str(dateTime[i]), distance[i], lux[i], angle[i])
cur.execute("insert into data_series(user_id,date,distance,lux,angle) values(%s,%s,%s,%s,%s)",
(tmpId, str(dateTime[i]), int(distance[i]), int(lux[i]), int(angle[i])))
cur.execute('select * from data_series') # 查询数据
for s in cur.fetchall():
print(s)
conn.commit()

cur.close()
conn.close()