一个基于flask的实时更新数据库项目

引言

在做导师项目的过程中,需要一个实时更新的数据库,用于完成实时仿真实验。然而工厂那边的数据库突然不好使了,而且就算好使的话本人涉及到的工业项目一般也是半夜凌晨开工,就算好使也不能凌晨在实验室做项目啊。。。一怒之下,还是自己模拟一个实时更新的数据库吧。

前期工作

本人最近一直在用flask做项目,刚好学习到用SQLAlchemy操作数据库,那就正好趁热打铁,直接拿flask做一个每隔一段时间往数据库里插入数据的项目吧。

  1. 项目环境:Pycharm + Python 3.5 +flask v1.0.2 + mariadb(mysql也行)+Navicat(数据库可视化,方便操作数据库)+ csv格式的数据文件

其中,csv文件共6列,从左到右分别是current_A,current_B,current_C,action_A,action_B,action_C,共3601行(由于工业数据是保密的,不能外漏哈),csv文件的作用是将里面的数据一条条的插入到数据库中,模拟实际工业实时生产过程。

  1. 在Navicat中新建一个database,名为real_time_db,我的数据库用户名是root,密码是123456,本地ip就是127.0.0.1,于是,配置数据库的语句为:
# 配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@127.0.0.1/real_time_db'
# 跟踪数据库的修改,默认填False
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

需要注意,这地方需要导入pymysql第三方库。

  1. 在Navicat中导入表结构,表名为fur_data:
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for fur_data
-- ----------------------------
DROP TABLE IF EXISTS `fur_data`;
CREATE TABLE `fur_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `current_A` float DEFAULT NULL,
  `current_B` float DEFAULT NULL,
  `current_C` float DEFAULT NULL,
  `action_A` float DEFAULT NULL,
  `action_B` float DEFAULT NULL,
  `action_C` float DEFAULT NULL,
  `d_time` datetime DEFAULT NULL COMMENT '数据采集时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2906 DEFAULT CHARSET=latin1;

想插入一条数据,语句为:

-- 非真实数据
INSERT INTO `fur_data` VALUES ('1', '20000.0', '20000.0', '20000.0', '0.0', '0.0', '0.0', '2019-6-16 00:00:00');

完整代码

全部代码如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import time
import csv
import pymysql
pymysql.install_as_MySQLdb()

app = Flask(__name__)

# 配置数据库地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@127.0.0.1/real_time_db'
# 跟踪数据库的修改,默认填False
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

# 建立一个关于表的类
class Fur(db.Model):
    __tablename__ = 'fur_data'# 定义表名

    id = db.Column(db.Integer, primary_key=True)
    current_A = db.Column(db.Float, nullable=False)
    current_B = db.Column(db.Float, nullable=False)
    current_C = db.Column(db.Float, nullable=False)
    action_A = db.Column(db.Float, nullable=False)
    action_B = db.Column(db.Float, nullable=False)
    action_C = db.Column(db.Float, nullable=False)
    d_time = db.Column(db.DateTime, nullable=False)

# 先删除,再创建
# 删除表
 db.drop_all()
# 创建表
 db.create_all()

reader = csv.reader(open('FMF_data.csv'))
# A,B,C电流和频率的list初始化
current_A_list = []
current_B_list = []
current_C_list = []
action_A_list = []
action_B_list = []
action_C_list = []

for list in reader:
    current_A_list.append(list[0])
    current_B_list.append(list[1])
    current_C_list.append(list[2])
    action_A_list.append(list[3])
    action_B_list.append(list[4])
    action_C_list.append(list[5])

len = len(current_A_list)
i = 0

# 每隔一秒插入一个数据
while True:
    time.sleep(1)
    current_A = current_A_list[i]
    current_B = current_B_list[i]
    current_C = current_C_list[i]
    action_A = action_A_list[i]
    action_B = action_B_list[i]
    action_C = action_C_list[i]
    d_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    fur = Fur(current_A=current_A, current_B=current_B, current_C=current_C, action_A=action_A, action_B=action_B, action_C=action_C, d_time=d_time)
    db.session.add(fur)
    db.session.commit()
    print("插入成功!")
    i += 1
    if i == 3600: #所有数据都插完了就从头再插一遍
        i = 0


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

运行过程中,当下方交互式命令行显示“插入成功!”,说明程序正常运行了,点开数据库,刷新一下,看看是否是实时更新的数据库。

最后

需要注意的是,在导入第三方库的过程中,

from flask_sqlalchemy import SQLAlchemy

这句话需要导入两个包:Flask-SQLAlchemy和SQLAlchemy,只导入一个的话编程过程中不会有错误提示,但是运行时就悲剧了。另外再报错的话看看数据库的配置改没改,端口是否被占用,python编辑器(interpreter)是否更改等问题。
关于时间戳的问题,详见我的另一篇博客:https://blog.csdn.net/xiecheng1995/article/details/90900496

本人原创。转载请标明出处,谢谢!

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一个简单的基于 Flask 和 SQLite3 的信息管理系统: 1. 安装 Flask 和 SQLite3 在终端中输入以下命令安装 Flask 和 SQLite3: ``` pip install flask pip install sqlite3 ``` 2. 创建数据库项目目录下创建一个名为 `database.db` 的 SQLite3 数据库文件,用于保存用户的信息。可以使用 SQLite3 命令行工具或 SQLite3 可视化工具创建表和字段。 在这里我们创建一个 `users` 表,包含 `id`、`name` 和 `age` 三个字段: ``` CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER NOT NULL ); ``` 3. 创建 Flask 应用 在项目目录下创建一个名为 `app.py` 的 Python 文件,编写 Flask 应用程序。 ```python from flask import Flask, render_template, request, redirect, url_for import sqlite3 app = Flask(__name__) # 配置数据库文件路径 app.config['DATABASE'] = 'database.db' # 建立数据库连接 def get_db(): db = sqlite3.connect(app.config['DATABASE']) db.row_factory = sqlite3.Row return db # 关闭数据库连接 def close_db(e=None): db = sqlite3.connect(app.config['DATABASE']) if db is not None: db.close() # 初始化数据库 def init_db(): with app.app_context(): db = get_db() with app.open_resource('schema.sql', mode='r') as f: db.cursor().executescript(f.read()) db.commit() # 清空数据库 @app.route('/clear') def clear(): with app.app_context(): db = get_db() db.execute('DELETE FROM users') db.commit() return redirect(url_for('index')) # 首页,显示所有用户信息 @app.route('/') def index(): with app.app_context(): db = get_db() users = db.execute('SELECT * FROM users').fetchall() return render_template('index.html', users=users) # 添加用户信息 @app.route('/add', methods=['GET', 'POST']) def add(): if request.method == 'POST': name = request.form['name'] age = request.form['age'] with app.app_context(): db = get_db() db.execute('INSERT INTO users (name, age) VALUES (?, ?)', [name, age]) db.commit() return redirect(url_for('index')) else: return render_template('add.html') # 更新用户信息 @app.route('/edit/<int:id>', methods=['GET', 'POST']) def edit(id): if request.method == 'POST': name = request.form['name'] age = request.form['age'] with app.app_context(): db = get_db() db.execute('UPDATE users SET name=?, age=? WHERE id=?', [name, age, id]) db.commit() return redirect(url_for('index')) else: with app.app_context(): db = get_db() user = db.execute('SELECT * FROM users WHERE id=?', [id]).fetchone() return render_template('edit.html', user=user) # 删除用户信息 @app.route('/delete/<int:id>') def delete(id): with app.app_context(): db = get_db() db.execute('DELETE FROM users WHERE id=?', [id]) db.commit() return redirect(url_for('index')) # 注册清空数据库命令 @app.cli.command('clear-db') def clear_db_command(): clear() # 启动应用 if __name__ == '__main__': app.run(debug=True) ``` 4. 创建 HTML 模板 在项目目录下创建一个名为 `templates` 的文件夹,用于保存 HTML 模板文件。 在 `templates` 文件夹中创建三个 HTML 文件: `index.html`:显示所有用户信息 ```html <!DOCTYPE html> <html> <head> <title>Information Management System</title> </head> <body> <h1>Information Management System</h1> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Age</th> <th>Operation</th> </tr> </thead> <tbody> {% for user in users %} <tr> <td>{{ user['id'] }}</td> <td>{{ user['name'] }}</td> <td>{{ user['age'] }}</td> <td> <a href="{{ url_for('edit', id=user['id']) }}">Edit</a> <a href="{{ url_for('delete', id=user['id']) }}">Delete</a> </td> </tr> {% endfor %} </tbody> </table> <a href="{{ url_for('add') }}">Add User</a> <a href="{{ url_for('clear') }}">Clear Database</a> </body> </html> ``` `add.html`:添加用户信息 ```html <!DOCTYPE html> <html> <head> <title>Information Management System</title> </head> <body> <h1>Information Management System</h1> <form method="POST" action="{{ url_for('add') }}"> <label for="name">Name:</label> <input type="text" id="name" name="name" required> <br> <label for="age">Age:</label> <input type="number" id="age" name="age" required> <br> <button type="submit">Add</button> </form> <a href="{{ url_for('index') }}">Back to List</a> </body> </html> ``` `edit.html`:更新用户信息 ```html <!DOCTYPE html> <html> <head> <title>Information Management System</title> </head> <body> <h1>Information Management System</h1> <form method="POST" action="{{ url_for('edit', id=user['id']) }}"> <label for="name">Name:</label> <input type="text" id="name" name="name" value="{{ user['name'] }}" required> <br> <label for="age">Age:</label> <input type="number" id="age" name="age" value="{{ user['age'] }}" required> <br> <button type="submit">Update</button> </form> <a href="{{ url_for('index') }}">Back to List</a> </body> </html> ``` 5. 运行应用 在终端中进入项目目录,运行以下命令启动应用: ``` python app.py ``` 在浏览器中访问 `http://localhost:5000/` 即可使用信息管理系统。 你可以在系统中添加、更新和删除用户信息,也可以清空数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值