MySql使用存储过程开发
文章目录
- 废 话
- 一、Navicat for MySQL
- 1.1 连接数据库
- 1.2 查询数据库
- 1.2.1 打开数据库连接
- 1.2.2 最简单的查询数据
- 二、创建存储过程
- 2.1 新建存储过程
- 2.2 编写一个存储过程
- 2.2.1 需求
- 2.2.2 编写存储过程体
- 三、应用储存过程
- 3.1 创建Django工程
- 3.1.1 创建Django工程,命名为【**country**】
- 3.1.2 创建子应用【world】
- 3.2 配置文件【settings.py】
- 3.2.1 安装MySql驱动MySqlClient
- 3.2.2 数据库连接信息
- 3.3 路由地址【urls.py】
- 3.2.1 创建应用路由
- 3.3.2 添加应用路由到主路由
- 3.4 创建页面
- 3.4.1 编写页面代码
- 3.4.2 查询数据库python实现
- 四、查看结果
- 4.1 启动程序
- 4.2 通过浏览器验证结果
- 五、总结
- 附件
废 话
过去初入职场时,使用Microsoft SqlServer进行开发工作,经常使用存储过程解决数据处理问题,很多变化频繁的业务逻辑,如果通过存储过程实现,在变更时,就会显得特别简单和方便。只要通过发布脚本就可实现。不得不说,当年,通过Microsoft SqlServer开发数据库及报表应用,是真的好用。
多年后的今天,发现如今的数据库应用是MySql的天下了,免费开源是真香,使用第三方工具进行MySql的开发还是不错的,不过个人感觉,开发过程不如Microsoft Sql Server官方开发环境使用方便,逻辑性更强,但是谁叫他收费呢,而且还不是一般的贵。
所谓废话少说,接下来直入主题吧。
一、Navicat for MySQL
当然,使用命令行进行开发,也是完全可以的,不过那简直是闲的蛋疼才那样干。学生时候,看到别人在“黑窗口”里敲代码,认为牛的不得了。现在再看到这样做,第一感觉是这人脑子有问题,放着简洁,美观,方便的工具不用,还用最原始的命令方式操作,您咋不用二进制写呢?所以我们选择Navicat for MySQL做为开发工具。
数据库安装过程就不说了,又不用天天安装,某度一下就解决的事。
Navicat for MySQL有绿色版本,不用安装。序列号,自己解决,下点工夫还是能找到的,某宝也就几块钱的事,我觉得与其搜索好几个小时,还不如花几块钱搞定,难道你的几个小时连几块钱都不值吗?
在安装目录下找到美丽的navicat.exe图标,双击之打开开发工具。
1.1 连接数据库
一眼就看到工具栏上有连接图标,这太醒目了,都无法形容了。
打开这个窗口时,发现其实很多内容都已经填好了。如果是安装在本机上的话,只需要随便填个名字(这个时候咱叫他“小甜甜"),密码(这个不能随便输)只有你自己知道。填好之后,“连接测试”一下。他会告诉你是否连接成功。
看到这个提示时,整个人都轻松了很多。
1.2 查询数据库
1.2.1 打开数据库连接
此时我们看到,”小甜甜“已经安静的在房间时等着咱了,还不快点过陪陪他,难道要等到她变成”牛夫人“?
双击”小甜甜“也行,右击”小甜甜“也行。她都会立马开心(打开连接)的。
1.2.2 最简单的查询数据
选择一个数据库,然后【查询->新建查询】就可以打开一个查询窗口。
在窗口里输入最简单的查询语言
select * from country;
”运行“,数据展现在了"结果1”中。
到现在mysql数据库,已经完美的安装,并可正常使用了。开心不!
二、创建存储过程
MySql这个“函数”让我困扰了很久,一度以为MySql不支持存储过程,而我好几年面对的都没有一个对MySql溜的知道这个问题,或都说他们故意不告诉我,因为在Microsoft SqlServer中,函数和存储过程是分开两个节点的,所以创建函数就是创建函数,创建存储过程就是存储过程。而MySql把函数和存储过程都归类在函数的子项。
2.1 新建存储过程
- 右键【函数->新建函数】,选择【过程】,【下一步】
- 配置参数,注意,这里的类型,选择varchar时,后面需要自己填上长度。否则在使用存储过程时会出错。当然,编写存储过程体时也可以再修改变量。
- 【完成】打开编辑窗口。
- 存储过程体就写在”BEGIN"和“END"内。在参数区可以对参数进行修改。
2.2 编写一个存储过程
2.2.1 需求
就在上文的样例数据库world中的country表中查询某洲,超过某个数据人口的国家。
2.2.2 编写存储过程体
- 常用的查询脚本
通常使用的查询脚本,例如: 查询亚洲,超过10亿人的国家
# 查询亚洲,超过10亿人的国家
SELECT *
FROM country
WHERE Continent = 'Asia' And Population > 1000000000;
存储过程
这时需要把洲(Continent)人口数(Population)作为参数传给存储过程。于是先修改参数为:这里要注意,参数名称不可与表字段名称相同。
IN `vContinent` varchar(30),IN `lPopulation` long
编写脚本:
BEGIN#Routine body goes here...SELECT *FROM countryWHERE `Continent` = vContinent And `Population` > lPopulation
;
END
保存存储过程(点【保存】或者Ctrl+s):
填写一个实用的名字就可以了。
执行存储过程(点【运行】)
先输入参数,再【确定】
此时在【结果1】中可以看到查询到的结果。
三、应用储存过程
使用Python环境,Django框架查询并显示数据。
3.1 创建Django工程
3.1.1 创建Django工程,命名为【country】
这里创建过程忽略
3.1.2 创建子应用【world】
创建过程忽略
3.2 配置文件【settings.py】
打开配置文件【country->country->settings.py】
3.2.1 安装MySql驱动MySqlClient
在命令行直接执行:
pip install mysqlclient
这个大概率会报错。于是我们可以通过把对应文件下载到本地。下载地址就是pip源地址。在源目录里依据机器python版本来选择具体要下载的文件。
清华源的mysqlclient下载连接
下载到本地之后,在命令行导航到下载目录,然后执行pip命令。
下图是下载的mysqlclient 2.0.4版本,实用于python3.6版本的windows64位版本。
执行后,显示mysqlclient成功安装完成。
通过pip list命令列出所有安装的包,可以找到安装好的mysqlclient.
3.2.2 数据库连接信息
- 配置充许访问服务器的范围为任何主机
ALLOWED_HOSTS = ["*"]
- 添加app到配置文件列表
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','world.apps.WorldConfig', # 添加创建的应用,也可以写成'world',
]
- 修改【DATABASE】默认数据库连接信息为:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'world','HOST': 'localhost','PORT': 3306,'USER': 'root','PASSWORD': 'Aa@123456','CHARSET': 'utf8'}
}
3.3 路由地址【urls.py】
打开主路由文件【country->country->urls.py】
添加如下代码,让使可能通过主路由路由到应用中。
path('world/', include("world.urls")),
添加后文件内容如下样式:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('world/', include("world.urls")),
]
3.2.1 创建应用路由
在【country->world】目录下创建urls.py文件
可完成后面查询数据代码后再添加这里内容
引用了views.py文件中定义的视图类World。
from django.urls import path
from world.views import Worldapp_name = 'world'
urlpatterns = [path('', World.as_view(), name="world"),]
3.3.2 添加应用路由到主路由
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('world/', include("world.urls")),
]
3.4 创建页面
在目录【country->template】下,创建html文件【index.html】
3.4.1 编写页面代码
这里需要在后端返回名为data的数据集(此代码在【country->world->views.py】文件中实现。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>各大洲的国家</title><style type="text/css">table{background-color: darkgray;}table thead{background-color: deepskyblue;}table tbody{background-color: skyblue;}</style>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<label for="continentInput">洲:</label><input name="continentInput" id="continentInput">
<label for="populationInput">人口:</label><input name="populationInput" id="populationInput">
<input type="submit" title="查询" value="查询">
{% if data == None %}<h3>{{ strtip }}</h3>
{% else %}<table><thead><th>名称</th><th>洲</th><th>地区</th><th>国土面积</th><th>人口</th></thead><tbody>{% for item in data %}<tr><td>{{ item.1 }}</td><td>{{ item.2 }}</td><td>{{ item.3 }}</td><td>{{ item.4 }}</td><td>{{ item.6 }}</td></tr>{% endfor %}</tbody></table>
{% endif %}
</form>
</body>
</html>
3.4.2 查询数据库python实现
打开【country->world->views.py】文件,编辑如下代码:
from django.shortcuts import render# Create your views here.
from django.views import View
from django.db import connectionclass World(View):def get(self, request):strtip = '请通过洲名和人口数查询'data = Nonereturn render(request, template_name="world/index.html", context=locals())def post(self, request):continent_name = request.POST.get("continentInput", '')population = request.POST.get("populationInput", 0)with connection.cursor() as cursor:sql = "call sp_get_countrys(%(continent)s,%(population)s)"params = {'continent': continent_name,'population': population,}# callproc 无法返回数据表# cursor.callproc(sql, params=params)cursor.execute(sql, params)data = cursor.fetchall()print(data)return render(request, template_name="world/index.html", context=locals())
四、查看结果
4.1 启动程序
- 确认命令行当前位于根目录,即manage.py文件所在的目录。
- 输入启动命令
python manage.py runserver 0.0.0.0:8000
如下样式,表示工程成功启动,就可以通过浏览器打开页面了。
(country) D:\PyCharm 4.5.3\MyProject\01.查询MySql数据\country>python manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...System check identified no issues (0 silenced).
July 09, 2022 - 19:13:56
Django version 3.2.14, using settings 'country.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CTRL-BREAK.
4.2 通过浏览器验证结果
- 在浏览器地址栏输入url:
http://127.0.0.1:8000/world/
或者
http://localhost:8000/world/
- 浏览器加载出这样的内容,这是从后台get到的内容。
- 输入参数(Asia, 100000000)点击【查询】:
在亚洲,人口数量大于100000000的国家列表就显示出来了。
五、总结
内容较多,包括了前端后端,数据库等,并非难点知识。但要学会这些,还是有不少内容的。比如sql语言,Html,python,还要熟悉django框架。
尽量详细的描述,希望能给已经做好心理准备想做码农的有所帮助。
一向的目的就是能让一点都不懂的读者,在不用消耗太多脑细胞的情况下,能够完整的理解知识。
附件
本文源码下载
MySql使用存储过程开发相关推荐
- mysql存储过程在实际开发中怎么用_MYSQL存储过程开发中怎么使用游标嵌套
mysql存储过程开发中如何使用游标嵌套 在实际业务逻辑开发中,难免用到游标嵌套,举例如下: delimiter // drop procedure if exists good_nested_cur ...
- mysql %type_mysql 存储过程 %type
MYSQL修改存储过程的访问权限 版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/inforstack/article/details/80547478 ...
- MySQL 之 存储过程
一.初识存储过程 1.什么是存储过程 存储过程是在大型数据库系统中一组为了完成特定功能的SQL语句集,存储在数据库中.存储过程经过第一次编译后,再次调用不需要编译,用户可以通过指定的存储过程名和给出一 ...
- 《大型数据库技术》MySQL的进阶开发技巧
MySQL的进阶开发技巧 1.MySQL的存储过程 1.1 创建企业销售系统的数据库,命名为salesdb 1.2 创建一张商品销售表,命名为salerecords,包括如下字段:商品ID,商品名称, ...
- MySQL生产库开发规范
MySQL开发规范 文件状态: [ ] 草稿 [√] 正式发布 [ ] 正在修改 文件标识: 当前版本: V1.0 作 者: 贺磊 完成日期: 2016-05-24 变更记录 序号 ...
- MySQL的存储过程优缺点
MySQL的存储过程优缺点 1.存储过程概念 存储过程是一些sql语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序通过存储过程名字调用,也可以从另一个存储过程或触发器调用. ...
- MySQL之存储过程及函数的使用
MySQL之存储过程及函数的使用 4.存储过程和函数 4.1 存储过程和函数概述 存储过程和函数是 事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作 ...
- mysql 查询存储过程 速度_查询mysql过程
MySql 使用explain分析查询 今天写了个慢到哭的查询,想用explain分析下执行计划,后来发现explain也是有局限性的: EXPLAIN不会告诉你关于触发器.存储过程的信息或用户自定义 ...
- MySql的存储过程的优点与缺点
MySql的存储过程的优点与缺点 一.存储过程优点 二.存储过程的弊端 三.总结 总结下使用存储过程的优缺点 一.存储过程优点 存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句 ...
- mysql 电子书_MySQL开发与实践 (付森等著) 中文pdf扫描版[45MB]
本书作为MySQL课程的教材 系统全面地介绍了有关MySQL数据库应用开发所涉及的各类知识.全书共分16章 内容包括数据库基础.MySQL概述.MySQL语言基础.数据库和表的操作.数据库的查询.索引 ...
最新文章
- 网络带宽由什么决定_加工中心价格分析,加工中心价格是由什么决定的呢?
- 怎么将excel中的url批量转化为图片_阿里云+Power BI,轻松实现图片可视化报告(一)...
- SAP 报表程序的一些标准功能码
- phpcms下的邮箱设置
- 13-一对多左连接查询分步查询(查询所有客户及客户对应的订单)
- 怎么把图片上的字去掉_视频片头怎么减掉,电脑如何剪切掉视频的开头「视频批量剪辑」...
- 动态调试 ida linux,IDA动态调试-ELF
- OSPFv3中LSA详解(五)——Intra-Area-Prefix LSA详解
- tomcat,tomcat7配置https
- OpenAnolis社区致Linux开发者的一封信
- 数据库课程设计报告格式模版
- 《从零开始学架构:照着做,你也能成为架构师》李运华 读后感
- git删除多余的tracked文件(git提示ignored tracked with git)
- 用Boost::spirit库写C++的源代码解析器(一) 一个简单的例子:解析enum的解析器雏形
- Qt的主窗口背景设置
- python的打开界面_Python 实现炫酷的启动界面
- iOS 手机 邮箱 正则表达式
- 程序员找工作有哪些渠道?
- 作为一个移动应用开发者,我们的创意应当避免走向低俗
- 【ARM指令】LDRD与STRD