python之flask学习笔记(三):orm版本的网页请求增删改查

老规矩,看代码,看代码注释。

 

注意: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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值