用Flask搭建一个web应用(二)---数据库查询query转字典格式

本文介绍了一个通用方法,用于将ORM查询结果转换为字典,并解决了在JSON响应中出现的中文乱码问题。通过设置app配置参数,确保了中文字符的正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个公共方法

def model_to_dict(result):
    from collections import Iterable
    try:
        if isinstance(result, Iterable):
            tmp = [dict(zip(res.__dict__.keys(), res.__dict__.values())) for res in result]
            for t in tmp:
                t.pop('_sa_instance_state')
        else:
            tmp = dict(zip(result.__dict__.keys(), result.__dict__.values()))
            tmp.pop('_sa_instance_state')
        print(tmp)
        return tmp
    except BaseException as e:
        print(e.args)
        raise TypeError('Type error of parameter')

应用

@app.route('/detail',methods=["GET","POST"])
def detail():
    articles = Article.query.all()
    print(articles)
    model_to_dict(articles)
    return jsonify(model_to_dict(articles))

看下输出:

发现乱码了

中文乱码解决方案

app.config['JSON_AS_ASCII'] = False

最终结果

 

好的,我来为您介绍如何使用Flask结合pymsql查询SQL Server数据库,并将结果返回给前端生成饼图的过程: 1. 首先,确保安装了必要的库: ``` pip install flask pymysql pyodbc ``` 2. 在Flask应用中配置数据库连接: ```python from flask import Flask, jsonify import pymysql import pyodbc app = Flask(__name__) # 配置SQL Server连接 conn_str = ( 'DRIVER={SQL Server};' 'SERVER=your_server_name;' 'DATABASE=your_database_name;' 'UID=your_username;' 'PWD=your_password' ) # 连接函数 def get_db_connection(): conn = pyodbc.connect(conn_str) return conn ``` 3. 编写查询函数: ```python def get_query_results(): conn = get_db_connection() cursor = conn.cursor() query = "SELECT column1, COUNT(*) as count FROM your_table GROUP BY column1" cursor.execute(query) results = cursor.fetchall() cursor.close() conn.close() return results ``` 4. 创建Flask路由返回JSON数据: ```python @app.route('/api/data') def api_data(): results = get_query_results() data = [{'name': row[0], 'value': row[1]} for row in results] return jsonify(data) ``` 5. 前端使用ECharts生成饼图: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ECharts</title> <!-- 引入 ECharts 文件 --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script> </head> <body> <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --> <div id="main" style="width: 600px;height:400px;"></div> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); // 使用Ajax获取数据 fetch('/api/data') .then(response => response.json()) .then(data => { // 绘制图表 myChart.setOption({ title: { text: '数据分布', left: 'center' }, tooltip: { trigger: 'item' }, legend: { orient: 'vertical', left: 'left', }, series: [ { name: '数据', type: 'pie', radius: '50%', data: data, emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ] }); }); </script> </body> </html> ``` 这段代码实现了以下功能: 1. 使用Flask搭建Web服务器。 2. 通过pymysql和pyodbc连接SQL Server数据库。 3. 执行SQL查询并返回结果。 4. 使用Flask的jsonify函数将查询结果换为JSON格式。 5. 前端使用ECharts读取JSON数据并生成饼图。 这样,您就可以通过Flask和pymysql查询SQL Server数据库,并将结果返回给前端生成饼图了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值