一、外部数据库
已有MySQL数据库中表的字段:
表名:tb_monitor_param(监测参数表)
字段名 | 类型名 | 类型长度 | 主外建关系 | 备注 |
monitor_no | varchar | 32 | 外键(tb_monitor) | 监测点 |
create_time | datetime |
|
| 数据录入时间 |
air_temperture | double |
|
| 空气温度 |
air_humidity | double |
|
| 空气湿度 |
soil_temperture10 | double |
|
| 10cm土壤温度 |
soil_temperture20 | double |
|
| 20cm土壤温度 |
soil_temperture30 | double |
|
| 30cm土壤温度 |
soil_temperture40 | double |
|
| 40cm土壤温度 |
soil_temperture50 | double |
|
| 50cm土壤温度 |
soil_humidity10 | double |
|
| 10cm土壤含水量 |
soil_humidity20 | double |
|
| 20cm土壤含水量 |
soil_humidity30 | double |
|
| 30cm土壤含水量 |
soil_humidity40 | double |
|
| 40cm土壤含水量 |
soil_humidity50 | double |
|
| 50cm土壤含水量 |
Ph | double |
|
| PH值 |
co2 | double |
|
| co2浓度 |
light_intencity | double |
|
| 光照强度 |
electrical_conductivity | double |
|
| 电导率 |
battery_voltage | double |
|
| 电池电压 |
mainboard_temperture | double |
|
| 主板温度 |
wind_direction | double |
|
| 顺势风向 |
wind_speed | double |
|
| 瞬时风速 |
rain_fall | double |
|
| 小时降雨量 |
air_pressure | double |
|
| 当前压气 |
已有的数据库是不能更改的是传感器实时数据并且保存2个月的数据,为了实现用户管理、农事信息预警和农事信息管理仍需要建立另外的数据库搭建在自己的服务器中,该数据库应有三个表:users、warning、manage。
二、本地数据库
创建本地数据库
SET names UTF8;
DROP DATABASE IF EXISTS sysplus;
CREATE DATABASE sysplus charset = UTF8;
USE sysplus;
create table users(
uid int primary key auto_increment, -- 账号
uname varchar(20) unique, -- 昵称
upwd varchar(10) NOT NULL, -- 密码
uavatar varchar(500), -- 头像地址
uphone varchar(20), -- 手机号
sex boolean default 1, -- 性别,男1,女0, 默认1
birthday date, -- 生日
umail varchar(20), -- email
uidcard varchar(20) -- IDCARD
);
create table manage( -- 警告
mid int primary key auto_increment,
mtime datetime, -- 时间
mname varchar(100), -- 标题
mdose varchar(100), -- 用量
mclass int -- 种类
);
create table warning( -- 警告
wid int primary key auto_increment,
content varchar(100), -- 标题
wtime datetime -- 时间
);
向本地数据库中插入部分数据
-- 用户信息users按照表中格式插入,这里不显示
insert into manage (mtime, mname, mdose, mclass) values('2023-1-1 10:00:02','氮肥','200g', 1),('2023-1-1 10:00:02','氮肥','200g', 1),('2023-1-1 10:00:02','氮肥','200g', 1),('2023-1-1 10:00:02','氮肥','200g', 1),
('2023-1-1 10:00:02','','200ml', 2),('2023-1-1 10:00:02','','200ml', 2),('2023-1-1 10:00:02','','200ml', 2),('2023-1-1 10:00:02','','200ml', 2),
('2023-1-1 10:00:02','杀虫剂','20ml', 3),('2023-1-1 10:00:02','杀虫剂','20ml', 3),('2023-1-1 10:00:02','杀虫剂','20ml', 3),('2023-1-1 10:00:02','杀虫剂','20ml', 3),('2023-1-1 10:00:02','杀虫剂','20ml', 3),('2023-1-1 10:00:02','杀虫剂','20ml', 3),('2023-1-1 10:00:02','杀虫剂','20ml', 3);
insert into warning values(null, '温度过高', '2023-1-30 18:13');
insert into warning (content, wtime) values('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00'),
('湿度过低', '2023-1-28 18:00');
三、使用python中flask sqlalchemy搭建后端代码实现交互
首先用pycharm官方版新建一个flask项目。
将app.py文件中的主函数改为以下情形

并且设置跨域请求
from flask_cors import CORS # 引用CORS,后期需要VUE支持跨域访问会用到
# Flask类只有一个必须指定的参数,即程序主模块或者包的名字,__name__是系统变量,该变量指的是本py文件的文件名
app = Flask(__name__)
# resources全局配置允许跨域的API接口,我们这边为了学习,配置所有,详细学习请百度搜索文档
CORS(app, resources=r'/*')
在flask项目根目录中新建config.py文件用于配置数据库信息

将配置导入app.py
from flask_sqlalchemy import SQLAlchemy
from config import SQLALCHEMY_DATABASE_URI, SQLALCHEMY_BINDS
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_BINDS'] = SQLALCHEMY_BINDS
db = SQLAlchemy(app)
配置数据库详细信息 app.py
class User(db.Model):
# 使用默认数据库,不需要像下面指定__bind_key__
__tablename__ = 'users' # 表名
uid = db.Column(db.Integer, primary_key=True)
uname = db.Column(db.String(20))
upwd = db.Column(db.String(10), nullable=False)
uavatar = db.Column(db.String(500))
uphone = db.Column(db.String(20))
sex = db.Column(db.Integer)
birthday = db.Column(db.Date)
umail = db.Column(db.String(20))
uidcard = db.Column(db.String(20))
def regist(self):
return {
"uname": self.uname,
"uphone": self.uphone,
"uidcard": self.uidcard
}
def jsonformat(self):
return {
"uid": self.uid,
"uname": self.uname,
"upwd": self.upwd,
"uavatar": self.uavatar,
"uphone": self.uphone,
"sex": self.sex,
"birthday": self.birthday,
"umail": self.umail,
"uidcard": self.uidcard
}
class MonitorParam(db.Model):
__bind_key__ = 'param' # 已设置__bind_key__ 数据库名
__tablename__ = 'tb_monitor_param' # 表名
monitor_no = db.Column(db.String(32))
# monitor_no = db.Column(db.String(32), primary_key=True)
create_time = db.Column(db.DateTime)
air_temperture = db.Column(db.Float)
air_humidity = db.Column(db.Float)
soil_temperture10 = db.Column(db.Float)
soil_temperture20 = db.Column(db.Float)
soil_temperture30 = db.Column(db.Float)
soil_temperture40 = db.Column(db.Float)
soil_temperture50 = db.Column(db.Float)
soil_humidity10 = db.Column(db.Float)
soil_humidity20 = db.Column(db.Float)
soil_humidity30 = db.Column(db.Float)
soil_humidity40 = db.Column(db.Float)
soil_humidity50 = db.Column(db.Float)
Ph = db.Column(db.Float)
co2 = db.Column(db.Float)
light_intencity = db.Column(db.Float)
electrical_conductivity = db.Column(db.Float)
battery_voltage = db.Column(db.Float)
mainboard_temperture = db.Column(db.Float)
wind_direction = db.Column(db.Float)
wind_speed = db.Column(db.Float)
rain_fall = db.Column(db.Float)
air_pressure = db.Column(db.Float)
__mapper_args__ = {
'primary_key': [monitor_no, create_time]
}
def jsonformat(self):
return {
"monitor_no": self.monitor_no,
"create_time": self.create_time,
"air_temperture": self.air_temperture,
"air_humidity": self.air_humidity,
"soil_temperture10": self.soil_temperture10,
"soil_temperture20": self.soil_temperture20,
"soil_temperture30": self.soil_temperture30,
"soil_temperture40": self.soil_temperture40,
"soil_temperture50": self.soil_temperture50,
"soil_humidity10": self.soil_humidity10,
"soil_humidity20": self.soil_humidity20,
"soil_humidity30": self.soil_humidity30,
"soil_humidity40": self.soil_humidity40,
"soil_humidity50": self.soil_humidity50,
"Ph": self.Ph,
"co2": self.co2,
"light_intencity": self.light_intencity,
"electrical_conductivity": self.electrical_conductivity,
"battery_voltage": self.battery_voltage,
"mainboard_temperture": self.mainboard_temperture,
"wind_direction": self.wind_direction,
"wind_speed": self.wind_speed,
"rain_fall": self.rain_fall,
"air_pressure": self.air_pressure
}
以上我们就将数据库后端配置完成了
之后将要进行前端页面设计实现以及后端接口实现,这是我的首个“大”项目,想要完整详细的记录下来,点击我的主页更新了就会有后续内容。