温室种植管理与决策系统开发与设计(五)——数据库与后端

一、外部数据库

已有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搭建后端代码实现交互

  1. 首先用pycharm官方版新建一个flask项目。

  1. 将app.py文件中的主函数改为以下情形

  1. 并且设置跨域请求

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

  1. 将配置导入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)
  1. 配置数据库详细信息 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
        }

以上我们就将数据库后端配置完成了

之后将要进行前端页面设计实现以及后端接口实现,这是我的首个“大”项目,想要完整详细的记录下来,点击我的主页更新了就会有后续内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇星静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值