老规矩,看代码,看代码注释。
注意:config那部分可忽略掉,就是为了让用户名密码以及主机被保护起来
from flask import Flask, jsonify, request
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker
from configuration import Configuration
import pymysql
import csv
"""
此代码用于接收前端页面的请求,对mysql数据库
进行增,删,改,查,以及将数据导出为Excel表
"""
app = Flask(__name__)
config = Configuration('config.conf')
# 内部主机,端口,密码等配置
TYJ_HOST = config.get_key('app', 'host') # 主机
TYJ_PORT = config.get_key('app', 'port') # 端口
TYJ_USER = config.get_key('app', 'user') # 用户名
TYJ_PASS = config.get_key('app', 'password') # 口令
#创建连接,root是用户名,123456是密码,192.168.是IP地址,test是数据库名。
engine = create_engine("mysql+pymysql://{}:{}@{}/test".format(TYJ_USER,TYJ_PASS,TYJ_HOST),encoding = 'utf-8',echo=True)
#生成orm基类
base = declarative_base()
class testMysql(base):
__tablename__ = 'testMysql'
id = Column(Integer,primary_key=True)
name = Column(String(32))
choose = Column(String(32))
type = Column(String(32))
descri = Column(String(32))
def __repr__(self):
return "<testMysql(id='%s',name='%s',choose='%s',type='%s',descri='%s')>"%(self.id,self.name,self.choose,self.type,self.descri)
def get_session():
"""
获取sqlalchemy的session,用于数据库操作
:return: 返回一个session
"""
Session_class = sessionmaker(bind = engine)
session = Session_class()
return session
def get_data(): # 获取数据库的数据
"""
获取数据库的数据
:return:返回一个带有数据库数据的列表
"""
session = get_session()
resul = session.query(testMysql).all()
lis = []
for res in resul:
dic = {'id': res.id, 'name': res.name, 'choose': res.choose, 'type': res.type, 'descri': res.descri}
lis.append(dic)
return lis
def insert_data(dic): # 往数据库里面添加数据
"""
往数据库里添加数据
:param dic:传进来的字典就是我们要添加的数据
:return:返回一个已经完成数据添加的数据库数据列表
"""
session = get_session()
user = testMysql(name=dic['name'],choose=dic['choose'],type=dic['type'],descri=dic['descri'])
session.add(user)
session.commit()
return get_data()
def del_data_from_local(dic):
"""
删除数据库的记录
:param dic: 传进来的字典的内容就是我们所要删除的字段
:return: 返回一个删除之后了的数据列表
"""
session = get_session()
session.query(testMysql).filter(testMysql.id == dic['id']).delete()
session.commit()
return get_data()
def up_data(dic):
"""
修改数据库的记录
:param dic: 传进来的字典的内容就是要修改的选项+修改后的值
:return: 返回修改之后的数据列表
"""
session = get_session()
session.query(testMysql).filter(testMysql.id == dic['id']).update({'choose':dic['choose']})
session.commit()
return get_data()
@app.route('/resource-view/api/v1.0/get', methods=['get'])
def return_data(): # 不要使用驼峰命名法 使用下划线 不要用关键字
lis = get_data()
result = {
"data": lis,
"code": 3301
}
return jsonify(result)
@app.route('/resource-view/api/v1.0/add_to_data', methods=['post'])
def add_to_data():
get_formdata = request.form
lis = insert_data(get_formdata)
result = {
"data": lis,
"code": 3301
}
return jsonify(result)
@app.route('/resource-view/api/v1.0/del_data',methods=['post'])
def del_data():
get_formdata = request.form
lis = del_data_from_local(get_formdata)
result = {
'data':lis,
'code':3301
}
return jsonify(result)
@app.route('/resource-view/api/v1.0/update_data',methods=['post'])
def update_data():
get_formdata = request.form
lis = up_data(get_formdata)
result = {
'data':lis,
'code':3301
}
return jsonify(result)
@app.route('/resource-view/api/v1.0/export-vm-excel',methods=['get'])
def exportExcel():
lis = get_data()
lis1 = []
lis1.append(list(lis[0]))
for dic in lis:
lis1.append(list(dic.values()))
with open('testData.csv', 'w', newline='') as csv_file:
writer = csv.writer(csv_file)
writer.writerows(lis1)
result = {
'data':lis,
'code':3301
}
return jsonify(result)
if __name__ == '__main__':
app.run(host=TYJ_HOST, port=TYJ_PORT)