Python Flask实现蓝图Blueprint配置和模块渲染
Python基础学习:
- Pyhton 语法基础
- Python 变量
- Python控制流
- Python 函数与类
- Python Exception处理
- Python 文件操作
- Python 日期与时间
- Python Socket的使用
- Python 模块
- Python 魔法方法与属性
Flask基础学习:
- Python中如何选择Web开发框架?
- Python Flask 入门开发
- 如何使用virtualenv实现python环境的隔离?
- Python中使用国内源头下载依赖
- Python Flask 路由配置
- Flask 使用Context上下文
- Python Flask实现蓝图Blueprint配置和模块渲染
蓝图(BluePrint)
蓝图(Blueprint
)是Flask
实现的应用模块化,通过模块化的方式分割视图,让应用的层次更加清晰,更加便于开发者开发和维护项目。通过蓝图,我们可以创建一组相同前缀的路由组合,可以用于分割应用不同的服务。如应用有两个服务:认证服务和用户服务,我们可以通过模块化分割服务,然后通过Flask
注册不同前缀的蓝图。
创建main服务
先创建一个main
服务,代码如下:
1、创建main.py
文件
# main.py
# !/usr/bin/env python
# -*-coding:utf-8 -*-
from datetime import datetime
from flask import render_template,session,redirect,url_for,abort,request,Blueprint
main = Blueprint('main', __name__)@main.route('/index')
def index(item_name="dashboard", **kwargs):return render_template('manager/index.html', item_name=item_name, kwargs=kwargs)@main.route('/user/<username>')
def user(username):return render_template('user.html', user=user)
2、创建api.py
文件
# !/usr/bin/env python
# -*-coding:utf-8 -*-
from flask import jsonify, request,make_response,Blueprint,Flask
from. import api@api.route('/post/', methods=['POST'])
def post():json = request.jsonprint(str(json))post1 = Post.from_json(json)db.session.add(post1)db.session.commit()return jsonify({"status": 1,"response": u"提交成功"})
3、注册Blueprint
# !/usr/bin/env python
# -*-coding:utf-8 -*-
from flask import Flask,render_template,Response
from flask_cors import CORSdef create_app(config_name):app = Flask(__name__)# 注册main服务from .main import main as main_blueprintapp.register_blueprint(main_blueprint, url_prefix='/manager')# 注册api服务from app.api import api as api_blueprintCORS(api_blueprint, supports_credentials=True)app.register_blueprint(api_blueprint, url_prefix='/api/v1.0')return app
模块渲染(Template)
使用Flask
可以直接在路由中返回Html
文档,但处理起来比较麻烦。因此,Flask
框架默认支持Jinja2
末班引擎,可通过flask
提供的内置方法render_template
直接进行渲染,我们只需要提供html
的相对路径即可,flask
中默认模板目录为templates
。
如下通过一个示例看下flask中的模板渲染如何使用:
from flask import render_template,Flaskapp = Flask(__name__)@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):return render_template('base.html', name=name)if __name__ == '__main__':app.run()
Jinja2 模板引擎
Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全:4
<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}<li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>
变量使用
Flask可以通过Jinja2模板将Python中的变量传递到html模板中。如下通过py和html中来了解如何使用:
// demo.py
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/args')
def temp_jinja2():data = {'Python': '编程语言','Flask': 'Web 框架','Jinja2': '模板引擎','HTML': '前端语言'}return render_template('route_two.html', data=data)if __name__ == '__main__':app.run(debug=True)
如上,通过render_template传递jinja2参数。html使用变量如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Jinja2 Args</title>
</head>
<body>
<h2 style="color: red">获取 data 中的数据:</h2>
<p style="color: blue"> {{ data['Python'] }} </p>
<p style="color: blue"> {{ data['Flask'] }} </p>
<p style="color: blue"> {{ data.Jinja2 }} </p>
<p style="color: blue"> {{ data.HTML }} </p>
<br/>
{% if data %}{{ data.keys() }}
{% else %}<p style="color: blue"> Hello Jinja2 ! </p>
{% endif %}
<br/>
<br/>
{% for key in data.keys() %}<div><p style="color: rebeccapurple"> {{ key }} : {{ data[key] }} </p></div>
{% endfor %}
</body>
</html>
过滤器
Flask中模板过滤器的使用是通过管道符(|)分割,也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。如 {{ name|striptags|title }}
会移除 name 中的所有 HTML 标签并且改写 为标题样式的大小写格式。其使用格式如下:
// 使用格式
{% 变量 | 过滤器名 %} // 示例
{# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p>
常见的内置过滤器:
- abs(number):返回参数的绝对值。
attr
(obj, name):获取对象的属性。 foo|attr(‘bar’) 像 foo[‘bar’] 一样工作,只是总是返回一个属性并且不查找项目。batch
(value, linecount, fill_with=None):批处理项目的过滤器。它的工作原理与 slice 非常相似,只是反过来。它返回具有给定项目数的列表列表。如果您提供第二个参数,则该参数用于填充缺失的项目。capitalize
(s):大写一个值。第一个字符将是大写的,所有其他字符都是小写的。center
(value, width=80):将给定宽度的字段中的值居中。default
(value, default_value=u”, boolean=False):如果该值未定义,它将返回传递的默认值,否则返回值。dictsort
(value, case_sensitive=False, by=’key’):对 dict 和 yield (key, value) 对进行排序。escape
(s):将字符串 s 中的字符 &、 、 、 ‘ 和 ” 转换为 HTML 安全序列。如果您需要在 HTML 中显示可能包含此类字符的文本,请使用此选项。将返回值标记为标记字符串。filesizeformat
(value, binary=False):将值格式化为“人类可读”的文件大小(即 13 kB、4.1 MB、102 字节等)。默认使用十进制前缀(Mega、Giga 等),如果第二个参数设置为 True,则使用二进制前缀(Mebi、Gibi)first
(seq):返回序列的第一项。float
(value, default=0.0):将值转换为浮点数。如果转换不起作用,它将返回 0.0。您可以使用第一个参数覆盖此默认值。forceescape
(value):强制 HTML 转义。这可能会使转义变量加倍。format
(value, *args, **kwargs):在对象上应用 python 字符串格式。groupby
(value, attribute):按公共属性对一系列对象进行分组。indent
(s, width=4, indentfirst=False):返回传递的字符串的副本,每行缩进 4 个空格。第一行没有缩进。int
(value, default=0):将值转换为整数。如果转换不成功,它将返回 0。join
(value, d=u”, attribute=None):返回一个字符串,它是序列中字符串的串联。last
(seq):返回序列的最后一项。length
(object):返回序列或映射的项目数。list
(value):将值转换为列表。如果它是一个字符串,则返回的列表将是一个字符列表。lower
(s):将值转换为小写。map
():对一系列对象应用过滤器或查找属性。这在处理对象列表时很有用,但您实际上只对它的某个值感兴趣。pprint
(value, verbose=False):漂亮地打印一个变量。对调试很有用。random
(seq):从序列中返回一个随机项。reject
():通过对对象或属性应用测试并拒绝测试成功的对象来过滤一系列对象。rejectattr
():通过对对象或属性应用测试并拒绝测试成功的对象来过滤一系列对象。replace
(s, old, new, count=None):返回值的副本,所有出现的子字符串都替换为新的子字符串。reverse
(value):反转对象或返回一个迭代器,以相反的方式迭代它。round
(value, precision=0, method=’common’):将数字四舍五入到给定的精度。safe
(value):将该值标记为安全的,这意味着在启用了自动转义的环境中,该变量将不会被转义。select
():通过对对象或属性应用测试并仅选择测试成功的对象来过滤一系列对象。selectattr
():通过对对象或属性应用测试并仅选择测试成功的对象来过滤一系列对象。slice
(value, slices, fill_with=None):切片迭代器并返回包含这些项目的列表列表。sort
(value, reverse=False, case_sensitive=False, attribute=None):对可迭代对象进行排序。默认情况下它按升序排序,如果您将它作为第一个参数传递 true 它将反转排序。string
(object):如果还没有,请创建一个字符串 unicode。这样标记字符串就不会转换回 unicode。striptags
(value):去除 SGML/XML 标签并将相邻的空格替换为一个空格。sum
(iterable, attribute=None, start=0):返回数字序列加上参数“start”的值(默认为 0)的总和。当序列为空时,它返回开始。title
(s):返回值的标题版本。 IE。单词将以大写字母开头,所有其余字符均为小写字母。trim
(value):去除前导和尾随空白。truncate
(s, length=255, killwords=False, end=’…’):返回字符串的截断副本。长度由第一个参数指定,默认为 255。upper
(s):将值转换为大写。urlencode
(value):用于 URL 的转义字符串(使用 UTF-8 编码)。它接受字典和常规字符串以及成对的可迭代对象。urlize
(value, trim_url_limit=None, nofollow=False):将纯文本的 URL 转换为可点击的链接。wordcount
(s):计算该字符串中的单词。wordwrap
(s, width=79, break_long_words=True, wrapstring=None):返回传递给过滤器的字符串副本,在 79 个字符后换行。xmlattr
(d, autospace=True):根据字典中的项目创建 SGML/XML 属性字符串。
示例代码
视图函数:
from flask import Flask, render_template# todo 初始化Flask项目的服务
app = Flask(__name__)student = {'name': 'kobe', 'age': 14, 'gender': '男'}@app.route('/str')
def test1():return render_template('04-字符串的过滤器.html',**student) #为了方便在模板中使用,可以把字典打伞if __name__ == '__main__':# 0.0.0.0:代表当前的系统的所有的ip地址,# 设置端口为8080,# flask的debug模式:把错误的信息显示到页面中app.run(host='0.0.0.0', port=8080, debug=True)
模板文件:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>字符串的过滤器</title>
</head>
<body>{# 当变量数据没有传入数据的时候,可以给变量设置默认值 #}
<p>{{ name | default('自律') }}</p>
<P>{{ name1 | default('自爱') }}</P>{# 单词首字母大写 #}
<p>{{ 'hello world' | capitalize }}</p> {# 单词全小写 #}
<p>{{ 'XML' | lower }}</p> {# 去除字符串前后的空白字符 #}
<p>{{ ' hello ' | trim }}</p> {# 字符串反转,返回"olleh" #}
<p>{{ 'hello' | reverse }}</p> {# 格式化输出,返回"Number is 99" #}
<p>{{ '%s is %d' | format("Number", 99) }}</p> {# 关闭HTML自动转义 #}
<p>{{ '<em>name</em>' | safe }}</p> {% autoescape false %}{# HTML转义,即使autoescape关了也转义,可以缩写为e #}
<p>{{ '<em>name</em>' | escape }}</p>
{% endautoescape %}
</body>
</html>
静态文件配置
Flask
框架默认静态文件的目录为根目录下的static
目录,默认模板文件目录为templates
,或者也可以通过Flask
来设置静态文件目录、模板目录、以及静态访问前缀。Flask
支持的设置参数如下:
def __init__(self,import_name: str, static_url_path: t.Optional[str] = None,static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",static_host: t.Optional[str] = None, host_matching: bool = False,subdomain_matching: bool = False,template_folder: t.Optional[str] = "templates",instance_path: t.Optional[str] = None,instance_relative_config: bool = False,root_path: t.Optional[str] = None,)
如下,我们可以通过一个示例来看一下如何设置:
from flask import Flaskapp = Flask(import_name=__name__,static_url_path='/',static_folder='static',template_folder='templates')
如下,通过一个示例来看下如何配置静态文件。
创建main.py
from flask import Flask, render_templateapp = Flask(import_name=__name__, static_url_path='/',static_folder='static', template_folder='templates')# 添加html访问路由
@app.route('/')
def blog():return render_template('index.html')if __name__ == "__main__":app.run() # 默认设置host:0.0.0.0 port:5000
创建静态文件和模板文件
如下所示,在模板中我们可以通过url_for
来访问获取静态文件,格式如下:
url_for(<static-folder>,<static-relative-path) # 社会静态目录和相对静态目录的静态文件地址
访问结果
相关文章:
Python Flask实现蓝图Blueprint配置和模块渲染
Python基础学习: Pyhton 语法基础Python 变量Python控制流Python 函数与类Python Exception处理Python 文件操作Python 日期与时间Python Socket的使用Python 模块Python 魔法方法与属性 Flask基础学习: Python中如何选择Web开发框架?Pyth…...
Vue10-事件修饰符
一、示例:<a>标签不执行默认的跳转行为 1-1、方式一 <a href"http://www.baidu.com" onclick"event.preventDefault();">点击我</a> 1-2、方式二 1-3、方式三:事件修饰符 二、Vue的六种事件修饰符 2-1、prevent&…...
oracle中如何查询特定日期?
1. select last_day(to_date(20230101,YYYYMMDD)) from dual; select last_day(to_date(V_END_DATE,YYYYMMDD)) from dual; --查询任意一天 当月的最后一天 2. select to_char(to_date(20230101,YYYYMMDD)-1,YYYYMMDD) INTO V_START_DATE FROM DUAL; select to_char(to_dat…...
Python使用rosbag使用getattr只能获取一层的数据,不能直接获取多层数据例如 a.b.c.d。使用for range写一个递归用来获取多层数据
使用for循环和range来遍历属性列表确实是一个更简单直观的方式,特别是不需要考虑性能优化和异常处理时。以下是使用for循环代替递归的示例代码: python def get_nested_attr(obj, attr_str): attrs attr_str.split(.) for attr in attrs: # 尝试获取下…...
LNWT--篇章三小测
问题1: BERT训练时候的学习率learning rate如何设置? 在训练初期使用较小的学习率(从 0 开始),在一定步数(比如 1000 步)内逐渐提高到正常大小(比如上面的 2e-5),避免模型过早进入…...
【NoSQL】Redis练习
1、redis的编译安装 systemctl stop firewalld systemctl disable firewalld setenforce 0 yum install -y gcc gcc-c make wget cd /opt wget https://download.redis.io/releases/redis-5.0.7.tar.gz tar zxvf redis-5.0.7.tar.gz -C /opt/cd /opt/redis-5.0.7/ # 编译 make…...
Git 和 Github 的使用
补充内容:EasyHPC - Git入门教程【笔记】 文章目录 常用命令配置信息分支管理管理仓库 概念理解SSH 密钥HTTPS 和 SSH 的区别在本地生成 SSH key在 Github 上添加 SSH key 使用的例子同步本地仓库的修改到远程仓库拉取远程仓库的修改到本地仓库拉取远程仓库的分支并…...
学习分享-断路器Hystrix与Sentinel的区别
断路器(Circuit Breaker)简介 断路器(Circuit Breaker)是一种用于保护分布式系统的服务稳定性和容错性的设计模式。它的主要作用是在检测到某个服务的调用出现故障(如超时、异常等)时,快速失败…...
社区物资交易互助平台的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,论坛管理,公告信息管理 前台账户功能包括:系统首页,个人中心,论坛,求助留言板,公…...
19-Nacos-服务实例的权重设置
19-Nacos-服务实例的权重设置 1.根据权重负载均衡: 1.服务器设备性能有差异,部分实例所在及其性能较高,有一些较差,我们希望性能好的机器承担更多的用户请求 Nacos提供了权重配置来控制访问频率,权重越大则访问频率…...
R语言数据探索和分析23-公共物品问卷分析
第一次实验使用最基本的公共物品游戏,不外加其他的treatment。班里的学生4人一组,一共44/411组。一共玩20个回合的公共物品游戏。每回合给15秒做决定的时间。第十回合后,给大家放一个几分钟的“爱心”视频(链接如下)&a…...
Webix前端界面框架:深度解析与应用实践
Webix前端界面框架:深度解析与应用实践 Webix,作为一款功能强大的前端界面框架,近年来在开发社区中逐渐崭露头角。本文将从四个方面、五个方面、六个方面和七个方面,深入剖析Webix的特性、优势、应用实践以及面临的挑战ÿ…...
Qt基于SQLite数据库的增删查改demo
一、效果展示 在Qt创建如图UI界面,主要包括“查询”、“添加”、“删除”、“更新”,四个功能模块。 查询:从数据库中查找所有数据的所有内容,并显示在左边的QListWidget控件上。 添加:在右边的QLineEdit标签上输入需…...
新书推荐:2.2.4 第11练:消息循环
/*------------------------------------------------------------------------ 011 编程达人win32 API每日一练 第11个例子GetMessage.c:消息循环 MSG结构 GetMessage函数 TranslateMessage函数:将虚拟键消息转换为字符消息 DispatchMessage函数…...
MASA:匹配一切、分割一切、跟踪一切
文章目录 摘要1、引言2、相关工作2.1、学习实例级关联2.2、Segment and Track Anything 模型 3、方法3.1、预备知识:SAM3.2、通过分割任何事物来匹配任何事物3.2.1、MASA流程3.2.2、MASA适配器3.2.3、推理 4、实验4.1、实验设置4.2、与最先进技术的比较4.3、消融研究…...
Websocket前端传参:深度解析与实战应用
Websocket前端传参:深度解析与实战应用 在现代Web开发中,Websocket作为一种双向通信协议,已经广泛应用于实时数据传输场景。前端传参作为Websocket通信的重要组成部分,其正确性和高效性直接影响到应用的性能和用户体验。本文将深…...
造假高手——faker
在测试写好的代码时通常需要用到一些测试数据,大量的真实数据有时候很难获取,如果手动制造测试数据又过于繁重无聊,显得不够优雅,今天我们介绍的faker这个轮子可以完美的解决这个问题。faker是一个用于生成各种类型假数据的库&…...
前端工程化工具系列(十二)—— PostCSS(v8.4.38):CSS 转换工具
PostCSS 是转换 CSS 语法的工具。它提供 API 来对 CSS 文件进行分析和修改它的规则。 PostCSS 本身并不能直接使用,主要是使用基于 PostCSS 编写的插件。 1 安装 pnpm add -D postcss-import postcss-nested postcss-preset-env cssnano2 配置 在项目根目录下创…...
Scanpy(3)单细胞数据分析常规流程
单细胞数据分析常规流程 面对高效快速的要求上,使用R分析数据越来越困难,转战Python分析,我们通过scanpy官网去学习如何分析单细胞下游常规分析。 数据3k PBMC来自健康的志愿者,可从10x Genomics免费获得。在linux系统上,可以取消注释并运行以下操作来下载和解压缩数据。…...
【Stable Diffusion】(基础篇二)—— Stable Diffusion图形界面介绍和基本使用流程
本系列笔记主要参考B站nenly同学的视频教程,传送门:B站第一套系统的AI绘画课!零基础学会Stable Diffusion,这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在上一篇博客中,我们成功…...
OpenCv之简单的人脸识别项目(动态处理页面)
人脸识别 准备九、动态处理页面1.导入所需的包2.设置窗口2.1定义窗口外观和大小2.2设置窗口背景2.2.1设置背景图片2.2.2创建label控件 3.定义视频处理脚本4.定义相机抓取脚本5.定义关闭窗口的函数6.按钮设计6.1视频处理按钮6.2相机抓取按钮6.3返回按钮 7.定义关键函数8.动态处理…...
【Linux】进程间通信
目录 一、进程间通信概念 二、进程间通信的发展 三、进程间通信的分类 四、管道 4.1 什么是管道 4.2 匿名管道 4.2 基于匿名管道设计进程池 4.3 命名管道 4.4 用命名管道实现server&client通信 五、system V共享内存 5.1 system V共享内存的引入 5.2 共享内存的…...
UI与前端:揭秘两者的微妙差异
UI与前端:揭秘两者的微妙差异 在数字化时代的浪潮中,UI设计和前端开发已成为塑造用户体验的两大核心力量。然而,这两者之间究竟有何区别?本文将深入剖析UI设计与前端开发的四个方面、五个方面、六个方面和七个方面的差异…...
idea如何根据路径快速在项目中快速打卡该页面
在idea项目中使用快捷键shift根据路径快速找到该文件并打卡 双击shift(连续按两下shift) -粘贴文件路径-鼠标左键点击选中跳转的路径 自动进入该路径页面 例如:我的实例路径为src/views/user/govType.vue 输入src/views/user/govType或加vue后缀src/views/user/go…...
探索成功者的特质——俞敏洪的观点启示
在人生的舞台上,我们常常对成功者充满好奇与敬仰,试图探寻他们成功的奥秘。俞敏洪指出,成功者都具备七个特质,而这些特质与家庭背景和大学的好坏并无直接关系。让我们深入剖析这七个特质,或许能从中获得对我们自身成长…...
MCU的环形FIFO
fifo.h #ifndef __FIFO_H #define __FIFO_H#include "main.h"#define RINGBUFF_LEN (500) //定义最大接收字节数 500typedef struct {uint16_t Head; // 头指针 指向可读起始地址 每读一个,数字1uint16_t Tail; // 尾指针 指…...
使用proteus仿真51单片机的流水灯实现
proteus介绍: proteus是一个十分便捷的用于电路仿真的软件,可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域,使用代码实现电路功能的仿真。 汇编语言介绍: 百度百科介绍如下: 汇编语言是培养…...
【漏洞复现】Apache OFBiz 路径遍历导致RCE漏洞(CVE-2024-36104)
0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。是美国阿帕奇(Apache)基金会的一套企业资源计划(ERP)系统。该系统提供了一整套基于Java的Web应用程序组件和工具。 0x02 …...
数据库表中创建字段查询出来却为NULL?
起因: 今天新创建了一张表,其中一个字段命名为"word_num"带下划线,我在前端页面怎么也查询不出来word_num的值,后来在后端接口处打印了一下数据库查询出来的数据,发现这个字段一直为NULL,然后我就想到是不是…...
缓存方法返回值
1. 业务需求 前端用户查询数据时,数据查询缓慢耗费时间; 基于缓存中间件实现缓存方法返回值:实现流程用户第一次查询时在数据库查询,并将查询的返回值存储在缓存中间件中,在缓存有效期内前端用户再次查询时,从缓存中间件缓存获取 2. 基于Redis实现 参考1 2.1 简单实现 引入…...
广西公司搭建网站公司/广告搜索引擎
例如:url为: http://localhost:8080/DemoServer/cellid_search?mnc1&cell59831&lac13572&mnc1&cell1942&lac98940 里面有两组参数,那么如何获取呢? String[] mncs request.getParameterValues("mnc"); String[] lacs request.getParamete…...
合肥网站建设 微笑互联/永久不收费的软件app
点 机械前沿”关注置顶引领机械前沿、机械视频,汽车、加工技术、3D打印、自动化、机器人、生产工艺、轴承、模具、机床、钣金等行业前沿在这里等你 电气故障现象是多种多样的,例如,同一类故障可能有不同的故障现象…...
wordpress 房产插件/百度投广告怎么收费
第二章 2.1 class文件的生成 java文件为源代码文件 class为程序. class文件实时修改. eclipse自动生成. project下面clean.2.2 jar文件 如何将有用的类传给别人使用. 1.把*.java文件发给对方. 2.把*.class打包发给对方.导出为jar文件. 右键export Java JAR file 2.3使用jar文…...
根据链接获取网站名称/搜索图片
名称:Action-Email 默认接收人:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障! 默认信息: 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警…...
小学网站建设工作小组/网店推广的方式
一、增:有2种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例:insert into Strdents (姓名,性别,出生日期) values (‘王伟华’,‘男’,‘1983/6/15’) 注意:如果…...
互动广告平台/seo项目培训
在修改mysql密码时,修改不生效 后来才发现 在mysql5.7以下版本就修改authentication_string update mysql.user set authentication_stringpassword(123456) where userroot and hostlocalhost;在mysql5.7以上版本就修改password update mysql.user set passwordpas…...