from datetime import datetime from flask import Flask, render_template, request import pandas as pd app = Flask(__name__) # 首页 @app.route('/') def index(): return render_template('index.html') # 登记数据页面 @app.route('/record', methods=['GET', 'POST']) def record(): if request.method == 'POST': # 获取表单数据 date_str = request.form['date'] shift = request.form['shift'] line = request.form['line'] machine = request.form['machine'] issue = request.form['issue'] isn = request.form['isn'] # 转换日期格式为datetime类型 date = datetime.strptime(date_str, '%Y-%m-%d') # 将数据保存到Excel文件 data = pd.DataFrame({ '日期': [date], '班次': [shift], '线别': [line], '不良机种': [machine], '不良现象': [issue], '不良ISN': [isn] }) filepath = 'D:/data.xlsx' data.to_excel(filepath, index=False, header=False if not pd.read_excel(filepath).size else True) return '<h1>数据已保存</h1>' else: return render_template('record.html') # 查询数据页面 @app.route('/query', methods=['GET', 'POST']) def query(): if request.method == 'POST': # 获取表单数据 date_str = request.form['date'] line = request.form['line'] machine = request.form['machine'] issue = request.form['issue'] # 转换日期格式为datetime类型 date = datetime.strptime(date_str, '%Y-%m-%d') # 从Excel文件中查询数据 data = pd.read_excel('D:/data.xlsx') query = data[(data['日期'] == date) & (data['线别'] == line) & (data['不良机种'] == machine) & (data['不良现象'] == issue)] query_html = query.to_html() return query_html else: return render_template('query.html') if __name__ == '__main__': app.run()
时间: 2024-04-03 09:35:40 浏览: 80
这段代码是用 Flask 框架实现的一个简单的数据登记和查询系统。其中,index() 函数返回网站的首页,record() 函数处理数据登记页面,query() 函数处理数据查询页面。数据存储在 Excel 文件中,使用 pandas 库读写 Excel 文件。你可以通过访问网站的不同路由来进行数据登记和查询操作。如果你想要运行这段代码,需要安装 Flask 和 pandas 库,并在本地运行 Flask 应用。
相关问题
兩個問題:1、請你幫我修改爲什麽查詢時查詢不到數據,2、爲什麽存儲數據會將之前存儲的給覆蓋掉?我需要在下一行新增不要覆蓋。請修改from datetime import datetime from flask import Flask, render_template, request import pandas as pd app = Flask(name) # 首页 @app.route('/') def index(): return render_template('index.html') # 登记数据页面 @app.route('/record', methods=['GET', 'POST']) def record(): if request.method == 'POST': # 获取表单数据 date_str = request.form['date'] shift = request.form['shift'] line = request.form['line'] machine = request.form['machine'] issue = request.form['issue'] isn = request.form['isn'] # 转换日期格式为datetime类型 date = datetime.strptime(date_str, '%Y-%m-%d') # 将数据保存到Excel文件 data = pd.DataFrame({ '日期': [date], '班次': [shift], '线别': [line], '不良机种': [machine], '不良现象': [issue], '不良ISN': [isn] }) filepath = 'D:/data.xlsx' data.to_excel(filepath, index=False, header=False if not pd.read_excel(filepath).size else True) return '<h1>数据已保存</h1>' else: return render_template('record.html') # 查询数据页面 @app.route('/query', methods=['GET', 'POST']) def query(): if request.method == 'POST': # 获取表单数据 date_str = request.form['date'] line = request.form['line'] machine = request.form['machine'] issue = request.form['issue'] # 转换日期格式为datetime类型 date = datetime.strptime(date_str, '%Y-%m-%d') # 从Excel文件中查询数据 data = pd.read_excel('D:/data.xlsx') query = data[(data['日期'] == date) & (data['线别'] == line) & (data['不良机种'] == machine) & (data['不良现象'] == issue)] query_html = query.to_html() return query_html else: return render_template('query.html') if name == 'main': app.run()
针对您的第一个问题,查询不到数据的情况可能是因为查询条件不满足或者数据还没有被存储到文件中。建议您检查一下查询条件是否正确,以及确认数据已经成功保存到 Excel 文件中。
针对您的第二个问题,存储数据时会将之前存储的数据覆盖掉,是因为在每次存储数据时使用了相同的文件路径,并且没有指定存储的方式。您可以将存储文件的方式修改为在原文件的基础上新增一行数据,可以使用 pandas 的 append() 方法实现。修改后的代码如下:
```python
# 将数据保存到Excel文件
data = pd.DataFrame({
'日期': [date],
'班次': [shift],
'线别': [line],
'不良机种': [machine],
'不良现象': [issue],
'不良ISN': [isn]
})
filepath = 'D:/data.xlsx'
if pd.read_excel(filepath).empty:
data.to_excel(filepath, index=False)
else:
writer = pd.ExcelWriter(filepath, engine='openpyxl', mode='a')
data.to_excel(writer, index=False, header=False)
writer.save()
```
这样,如果文件不存在数据,则直接将数据写入文件中;如果文件中已经存在数据,则使用 append() 方法将数据写入到文件的下一行。
网页抓取湛江市最近每天的最高气温,将数据处理结果保存进入MySQL,然后用pyecharts处理数据结果可视化,最后后用flask联通前后端(mysql->pyecharts网页)网页还需要有用户密码登录界面,用到URL构建,HTTP方法(POST),代码怎么写
这是一个比较复杂的项目,需要一定的编程基础和相应的技能。以下是大致的代码实现步骤:
1. 网页抓取:使用 requests 库发送 HTTP 请求,获取湛江市最近每天的最高气温。使用 Beautiful Soup 库对 HTML 进行解析,获取需要的数据。
```python
import requests
from bs4 import BeautifulSoup
url = 'http://xx.xx.xx.xx/temperature' # 要抓取数据的网页
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
data = []
for tr in soup.find_all('tr'):
tds = tr.find_all('td')
if len(tds) == 2:
data.append((tds[0].text.strip(), float(tds[1].text.strip())))
else:
print('请求失败')
```
2. 数据处理和保存:使用 Pandas 库对数据进行处理,然后使用 PyMySQL 库将数据写入 MySQL 数据库。
```python
import pandas as pd
import pymysql
# 数据处理
df = pd.DataFrame(data, columns=['date', 'temperature'])
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
# 数据库连接
conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8mb4')
# 写入数据
df.to_sql('temperature', conn, if_exists='replace')
# 关闭连接
conn.close()
```
3. 数据可视化:使用 PyEcharts 库将数据可视化。
```python
from pyecharts.charts import Line
from pyecharts import options as opts
import pymysql
# 数据库连接
conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8mb4')
# 从数据库中读取数据
cursor = conn.cursor()
cursor.execute('SELECT * FROM temperature')
data = cursor.fetchall()
cursor.close()
conn.close()
# 数据处理
x_data = [str(row[0]) for row in data]
y_data = [row[1] for row in data]
# 绘制折线图
line = Line()
line.add_xaxis(x_data)
line.add_yaxis('最高气温', y_data)
line.set_global_opts(title_opts=opts.TitleOpts(title='湛江市最近每天的最高气温'))
line.render('temperature.html')
```
4. 用户登录:使用 Flask 框架实现用户登录功能。
```python
from flask import Flask, request, redirect, url_for, session, render_template
app = Flask(__name__)
app.secret_key = 'xxx' # session 密钥
@app.route('/')
def index():
if 'username' in session:
return '欢迎登录,{}'.format(session['username'])
else:
return redirect(url_for('login'))
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if username == 'admin' and password == '123456':
session['username'] = username
return redirect(url_for('index'))
else:
return '用户名或密码错误'
else:
return render_template('login.html')
```
5. URL 构建和 HTTP 方法:使用 Flask 框架实现 URL 构建和 HTTP 方法。
```python
@app.route('/temperature')
def temperature():
if 'username' in session:
# 数据库连接
conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8mb4')
# 从数据库中读取数据
cursor = conn.cursor()
cursor.execute('SELECT * FROM temperature')
data = cursor.fetchall()
cursor.close()
conn.close()
# 数据处理
x_data = [str(row[0]) for row in data]
y_data = [row[1] for row in data]
# 绘制折线图
line = Line()
line.add_xaxis(x_data)
line.add_yaxis('最高气温', y_data)
line.set_global_opts(title_opts=opts.TitleOpts(title='湛江市最近每天的最高气温'))
return line.dump_options_with_quotes()
else:
return redirect(url_for('login'))
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
```
以上代码仅供参考,实际实现可能需要根据具体的需求进行调整。同时,还需要相应的 HTML 模板文件和静态文件。
阅读全文