python+django自动化平台(一键执行sql) 前端vue-element展示

一、开发环境搭建和配置

复制代码
pip install mysql-connector-python

pip install PyMySQL

二、django模块目录

复制代码
dbOperations
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-313.pyc
│   ├── admin.cpython-313.pyc
│   ├── apps.cpython-313.pyc
│   ├── models.cpython-313.pyc
│   └── views.cpython-313.pyc
├── admin.py
├── apps.py
├── migrations
│   ├── __init__.py
│   └── __pycache__
│       └── __init__.cpython-313.pyc
├── models.py
├── tests.py
└── views.py

三、django模块相关代码

复制代码
***************************settings.py*********************************************

#数据库 连接配置 mysql
DATABASES = {
    'default': {
        # 数据库引擎
        'ENGINE': 'django.db.backends.mysql',
        # 'ENGINE': 'sqlalchemy.create_engine',
        # 数据库名字
        'NAME': 'xx',
        # 数据库用户名
        'USER': 'xx',
        # 数据库密码
        'PASSWORD': 'xx',
        # 数据库主机地址
        'HOST': 'xx',
        # 数据库端口号
        'PORT': 'xx'
    }
}

************************************urls************************************


urlpatterns = [
  path('dbOperations/executeSQLView', db_views.executeSQLView,name='execute_sql_view'),
]

**************************************viwes.py************************************

import json
import logging

from django.db import connection
from django.http import JsonResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from rest_framework import status

from operation.common.enum.ResponeCodeEnum import ResponseCodeEnum
from operation.common.exception.BusinessException import BusinessException
from operation.common.utils.CommonResult import CommonResult
from operation.common.utils.Serializers import SQLExecutionSerializer


# Create your views here.


from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.db import connection
import logging
from rest_framework import status
import json

@csrf_exempt
def executeSQLView(request):
    try:
        if request.method == 'POST':
            json_data = request.body
            print(json_data)
            data = json.loads(json_data)
            sql = data.get('sql', None)
            # 序列化器的正确使用:在 serializer = SQLExecutionSerializer(data={'sql': sql}) 中,
            # 我们传递了一个包含 sql 键的字典,而不是直接传递 SQL 查询字符串。
            serializer = SQLExecutionSerializer(data={'sql': sql})
            if serializer.is_valid():
                sql = serializer.validated_data['sql']
                logging.info("sql:%s" % (sql))
                """
                    使用 with 语句管理游标
                """
                with connection.cursor() as cursor:
                    try:
                        # 执行 SQL 查询:
                        cursor.execute(sql)
                        results = cursor.fetchall()
                        # 处理查询结果:
                        columns = [col[0] for col in cursor.description]
                        # 将查询结果转换为字典列表,每个字典表示一行数据。
                        data = [dict(zip(columns, row)) for row in results]
                        return JsonResponse(CommonResult.success_data(data), json_dumps_params={'ensure_ascii': False})
                    except Exception as e:
                        # return JsonResponse(CommonResult.error(e.code, e.message),
                        #                     json_dumps_params={'ensure_ascii': False})
                        raise BusinessException(e.message, e.code)
            return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        else:
            raise BusinessException(ResponseCodeEnum.METHOD_ERROR.message, ResponseCodeEnum.METHOD_ERROR.code)
    except BusinessException as e:
        return JsonResponse(CommonResult.error(e.code, e.message), json_dumps_params={'ensure_ascii': False})

四、前端代码

复制代码
<template>
  <div class="app-container">
    <el-card shadow="always">
      <el-row :gutter="24">
        <el-input v-model="sqlParam.sql" type="textarea" :rows="10" placeholder="请输入SQL查询" />
        <el-button type="primary" @click="executeSQL">执行</el-button>
      </el-row>
    </el-card>

    <el-card shadow="always">

      <el-table v-if="data.length > 0" :data="data" style="width: 100%">
        <el-table-column v-for="key in Object.keys(data[0])" :key="key" :prop="key" :label="key" />
      </el-table>

    </el-card>
  </div>
</template>

<script>
import {
  executeSQLView
} from '@/api/dataBase/database-request'

export default {
  data() {
    return {
      sqlParam: { // 输入框给出默认值
        sql: ''
      },
      data: [],
      error: ''
    }
  },
  methods: {
    executeSQL() {
      this.dataLoading = true
      console.log('请求参数:' + this.sqlParam)
      executeSQLView(this.sqlParam).then((res) => {
        // alert(JSON.stringify(res.data.data))
        this.data = res.data.data
        setTimeout(() => { // 超过指定超时时间  关闭查询的转圈的loading加载动画
          this.listLoading = false
        }, 1.5 * 1000)
      })
    }
  }
}
</script>

<style>
</style>

五、运行效果

相关推荐
北极糊的狐42 分钟前
MySQL常见报错分析及解决方案总结(15)---Can’t connect to MySQL server on ‘localhost‘ (10061)
数据库·mysql
可触的未来,发芽的智生1 小时前
触摸未来2025.10.10:记忆的种子,当神经网络拥有了临时工作区,小名喜忆记系统
人工智能·python·神经网络·机器学习·架构
mortimer1 小时前
在 Windows 上部署 NVIDIA Parakeet-TDT 遇到的坑
python·github·nvidia
Rock_yzh2 小时前
AI学习日记——卷积神经网络(CNN):完整实现与可视化分析
人工智能·python·深度学习·神经网络·学习·cnn
生信小白菜儿2 小时前
深度学习(DL)概念及实例操作
人工智能·python·深度学习
陈一Tender2 小时前
JavaWeb后端实战(MySql基础)
mysql
-雷阵雨-2 小时前
MySQL——数据库操作攻略
数据库·mysql
Wadli2 小时前
csdn| MySQL
数据库·mysql
测试老哥2 小时前
如何编写好测试用例?
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
程序员水自流3 小时前
MySQL InnoDB存储引擎关键核心特性详细介绍
java·数据库·mysql