使用pycharm社区版和mysql完成一个数据集管理系统。先生成两个随机数据集,要求实现:(1)针对每个数据集可以展示出具体描述信息,并可提供下载,并用折线图显示下载量。(2)数据集上可以添加,评论,有点赞和踩;用户也可以取消点赞,可以删除自己的评论。首页展示关注度最高或者下载量最大的数据集,并用html在网页中显示,请显示完整代码
时间: 2024-03-23 11:40:25 浏览: 60
好的,首先我们需要安装PyMySQL和Flask扩展库,可以使用以下命令进行安装:
```python
pip install PyMySQL
pip install Flask
```
接下来,我们可以创建一个名为main.py的文件,代码如下:
```python
from flask import Flask, render_template, request, redirect, url_for, flash
import pymysql
import random
import os
app = Flask(__name__)
app.secret_key = 'secret_key'
# 数据库连接配置
db_config = {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': 'password',
'database': 'dataset_management'
}
# 生成随机数据集
def generate_dataset():
dataset = []
for i in range(10):
dataset.append({
'id': i + 1,
'name': f'dataset{i + 1}',
'description': f'this is description for dataset{i + 1}',
'downloads': random.randint(1, 100)
})
return dataset
# 初始化数据库
def init_db():
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('DROP TABLE IF EXISTS dataset')
cursor.execute('''
CREATE TABLE dataset (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
description VARCHAR(255),
downloads INT DEFAULT 0
)
''')
cursor.execute('DROP TABLE IF EXISTS comment')
cursor.execute('''
CREATE TABLE comment (
id INT PRIMARY KEY AUTO_INCREMENT,
dataset_id INT,
content VARCHAR(255),
likes INT DEFAULT 0,
dislikes INT DEFAULT 0
)
''')
conn.commit()
conn.close()
# 插入数据集
def insert_dataset(name, description):
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('INSERT INTO dataset(name, description) VALUES(%s, %s)', (name, description))
conn.commit()
conn.close()
# 获取数据集列表
def get_dataset_list():
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('SELECT * FROM dataset')
dataset_list = []
for row in cursor.fetchall():
dataset_list.append({
'id': row[0],
'name': row[1],
'description': row[2],
'downloads': row[3]
})
conn.close()
return dataset_list
# 获取数据集详情
def get_dataset_detail(dataset_id):
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('SELECT * FROM dataset WHERE id=%s', dataset_id)
row = cursor.fetchone()
dataset = {
'id': row[0],
'name': row[1],
'description': row[2],
'downloads': row[3]
}
cursor.execute('SELECT * FROM comment WHERE dataset_id=%s', dataset_id)
comments = []
for row in cursor.fetchall():
comments.append({
'id': row[0],
'dataset_id': row[1],
'content': row[2],
'likes': row[3],
'dislikes': row[4]
})
conn.close()
return dataset, comments
# 插入评论
def insert_comment(dataset_id, content):
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('INSERT INTO comment(dataset_id, content) VALUES(%s, %s)', (dataset_id, content))
conn.commit()
conn.close()
# 点赞评论
def like_comment(comment_id):
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('UPDATE comment SET likes=likes+1 WHERE id=%s', comment_id)
conn.commit()
conn.close()
# 踩评论
def dislike_comment(comment_id):
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('UPDATE comment SET dislikes=dislikes+1 WHERE id=%s', comment_id)
conn.commit()
conn.close()
# 删除评论
def delete_comment(comment_id):
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
cursor.execute('DELETE FROM comment WHERE id=%s', comment_id)
conn.commit()
conn.close()
@app.route('/')
def index():
dataset_list = get_dataset_list()
if dataset_list:
# 获取下载量最大的数据集
max_downloads_dataset = max(dataset_list, key=lambda x: x['downloads'])
return redirect(url_for('dataset_detail', dataset_id=max_downloads_dataset['id']))
return render_template('index.html')
@app.route('/dataset')
def dataset():
dataset_list = get_dataset_list()
return render_template('dataset.html', dataset_list=dataset_list)
@app.route('/dataset/add', methods=['GET', 'POST'])
def dataset_add():
if request.method == 'POST':
name = request.form['name']
description = request.form['description']
insert_dataset(name, description)
flash('添加成功!')
return redirect(url_for('dataset'))
return render_template('dataset_add.html')
@app.route('/dataset/<int:dataset_id>')
def dataset_detail(dataset_id):
dataset, comments = get_dataset_detail(dataset_id)
return render_template('dataset_detail.html', dataset=dataset, comments=comments)
@app.route('/dataset/<int:dataset_id>/comment/add', methods=['POST'])
def comment_add(dataset_id):
content = request.form['content']
insert_comment(dataset_id, content)
flash('评论成功!')
return redirect(url_for('dataset_detail', dataset_id=dataset_id))
@app.route('/comment/<int:comment_id>/like')
def comment_like(comment_id):
like_comment(comment_id)
return redirect(request.referrer)
@app.route('/comment/<int:comment_id>/dislike')
def comment_dislike(comment_id):
dislike_comment(comment_id)
return redirect(request.referrer)
@app.route('/comment/<int:comment_id>/delete')
def comment_delete(comment_id):
delete_comment(comment_id)
flash('删除成功!')
return redirect(request.referrer)
if __name__ == '__main__':
# 初始化数据库
init_db()
# 插入随机数据集
for i in range(10):
name = f'dataset{i + 1}'
description = f'this is description for dataset{i + 1}'
insert_dataset(name, description)
app.run(debug=True)
```
在代码中,我们使用了PyMySQL和Flask扩展库,定义了一些函数来操作数据库,并且使用了Flask框架来实现了一个数据集管理系统,包括数据集列表展示、数据集详情展示、评论功能等。
在运行代码之前,我们需要先在MySQL中创建一个名为dataset_management的数据库,命令如下:
```mysql
CREATE DATABASE dataset_management;
```
然后,我们可以运行main.py文件,访问http://127.0.0.1:5000/来查看效果。
在浏览器中输入http://127.0.0.1:5000/dataset,可以查看数据集列表,点击数据集名称可以查看数据集详情,可以添加评论、点赞、踩、删除评论等操作。同时,我们还可以在MySQL中查看到数据集和评论的数据。
阅读全文