Mysql查询语句进阶知识集锦

前言

上次咱们简单的学习了一下select的用法,一篇文章教会你进行Mysql数据库和数据表的基本操作,对数据库大概有了一些基本的了解。

咱们接着上次继续来看叭!

查询

数据如下

or查询

我们在上学时,会听到这样的话,某某某,你把谁谁谁或者谁谁谁叫过来。

这样子的话,我们我们要查询的,就是一个或(or)的关系了。

or查询只有满足一个条件即可

sql

-- 语法
SELECT * from student WHERE <条件> or <条件> ...;
-- 例如,查询姓名为张三的或者姓名为小刘的数据
SELECT * from student WHERE name="张三" or name="小刘";

执行结果

不等于(!=)查询

上述我们查询的,都是等于(=)操作,但是我们在上学时,还会有这种情况。

某个学生学习可好,背东西背的可快,放学的时候可能就人家一个人过了,这时候老师可能就说

除了某某某,其他学生本篇文章全部抄3遍,淦。。。

所以这时候就是反过来的查询的,只需要排除某个人即可!

sql

-- 语法
SELECT * from student WHERE <条件>;
-- 例如,查询姓名不是张三的其他人,排除张三
SELECT * from student WHERE name!="张三";

执行结果

in/not in查询

学生们还都是年轻人,年龄大概都在20来岁,这时候老师说,班长,把年龄在19,20,21的人统计一下!

根据上述我们学过的知识,可能你是这样婶的。

SELECT * from student WHERE age=19 or age=20 or age=21;

执行结果

通过三个or找到,其实这样也没错,但是还有一种更简单的。

sql

-- 语法
SELECT * from student WHERE <列名> in (值1,值2,...) ...;
-- 例如,需求同上
SELECT * from student WHERE age in (19,20,21);

执行结果

not in 就是不在这个范围的数据啦!

sql

-- 查询年龄不在19,20,21范围的数据
SELECT * from student WHERE age not in (19,20,21);

执行结果

between查询

between适合进行范围查询!

sql

-- 语法
select * fromwhere <列> between <开始范围> and <结束范围>;
-- 例如,查询年龄时20-22岁的学生
SELECT * from student WHERE age BETWEEN 20 and 22;

执行结果

同理,between还能用在时间上。

select * from <表名> where <时间列> between <开始时间> and <结束时间>

模糊查询(like)

假设现在数据如下,有三个姓张的。

老师可能突然有一天对你说,班长,把咱们姓张的列出来,我找他们谈点事,咋办???

我们只需要找,是以张开头的,后面是啥无所谓。

所以就要用到like模糊查询。

sql

-- 语法 %表示匹配一个或多个字符
select * fromwhere <列> like '[%]<字符串>[%]'
-- 例如,查询,以张开头的
SELECT * from student WHERE name like "张%";

执行结果

同理,这个%可以放在任意位置,他就是充当不确定的字符使用的,能够自动匹配一个或多个

例如

... WHERE name like "张%丰";
匹配:张三丰
WHERE name like "%鱼";
匹配:张甲鱼
WHERE name like "李%";
匹配:李四
...

限制(limit)

限制这个有点怪异,还是图片举例比较好。

数据如下

sql

-- 前两行
SELECT * from student LIMIT 2;

-- 从第2行开始后,再取4行
SELECT * from student LIMIT 2,4;
-- 同上,写法不同
SELECT * from student LIMIT 4 OFFSET 2

排序(order by)

不知道你有没有发现,我们之前查找的顺序都是正向的。

但是会有个问题,我们新增的数据,其实id是最大的,理论来说,应该要排在最前面。

所以,应该是倒序的是最好的。

sql

-- 语法
select * from <表名> order by <列> asc -- 从小到大排序
select * from <表名> order by <列> desc -- 从大到小排序
select * from <表名> order by <列1> desc,<列2> asc -- 先根据 列1 排序,如果数据相同,按照 列2 排序

例如

根据id正向排序

SELECT * from student ORDER BY id ASC;

执行结果

根据id反向排序

SELECT * from student ORDER BY id desc;

执行结果

hhh,这样我们就把数据反过来了!!!

分组(groupby)

分组,这个可能是难为了一批人,其实分组的核心,在于理解这个压缩这个概念。

假设数据如下

性别有男有女,如果我想知道,男的有多少个,女的有多少个怎么办???我总不能数吧。。。

所以这时候,如果能吧,男的都拿出来,女的都拿出来,就像这样!

然后我对拿出来进行压缩成一条。

如果这个你懂了,那分组就懂了。

语法

SELECT <列>,COUNT(<列>) from student GROUP BY <列>;
-- 因为分组了某个列,所以就不能再展示其他列的信息了,因为压在一块了,显示不了
-- 但是可以通过count,sum等函数计算压缩的个数,或者总值

例如

统计男女各多少人

SELECT gender,COUNT(gender) from student GROUP BY gender;

执行结果

统计同一年龄多少人

SELECT age,COUNT(age) as "数量" from student GROUP BY age;

执行结果

注意:group by必须在where之后,order by之前。

总结

本篇主要讲述的是Mysql查询语法,再单表查询中,基本上就上述这么些的内容,但是从理论到事件,是需要时间的。

一定要勤加练习,什么是or查询,like查询注意事项,尤其是group by分组查询,一定要多多思考和联系。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

不要轻易改变自己,因为你可能就是世界上那颗未加工的最亮的钻石。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。

感谢你的观看。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

安利一款神奇——教你轻松下载百度网盘超大文件

前言

玩过百度网盘的都应该清楚它的强大,小编就是靠着百度网盘那强大的功能以及变态的存储空间才获得许多具有纪念价值的东西,比如某些Hacker资料,你懂的。

但是小编一直以来都有一个心结未解开,那就是为毛每次使用百度网盘下载文件的时候就非得下载百度网盘客户端才可以了,估计先不说浪费时间和占用电脑资源,至少小编也是不乐意这样做的,毕竟小编电脑可是只有60个G的存储空间了。

那么,我们该怎么样处理这个问题呢?简而言之就是如何在不下载客户端的情况下就可以下载这个大型的文件了,一起往下看看。

一、坑爹的下载制度

先来回顾下这个坑爹的画面:

看到这里小编尴尬癌都犯了,本想下载个黑客工具玩玩,过过瘾,奈何是这个样子,正巧不巧的自己的电脑又出了点意外,无法安装百度云客户端,目前还无法找出根本原因;但是小编是那么轻易认输的人吗?当然不是,于是乎,小编便找到了这么个神器,浏览器的一个脚本—-一般圈内人都叫它们油猴。

二、油猴脚本

油猴(Tampermonkey),这哥们我相信只要是玩过Google浏览器的同志都不会太陌生,它有着丰富的脚本资源,因而可以满足我们平时的网络需求,但是请注意,油猴脚本只能作用在Chromeium内核的浏览器上哦,小编所使用的360浏览器就是其中之一,其它的像什么QQ浏览器,UC浏览器等都是,随意选择一种即可;IE浏览器不是哦。

三、安装脚本

这里我们以360浏览器为主进行讲解,首先需要进入扩展管理界面,要想进入就得先点击管理图标,如下:

就是这个田子型的图标,点击它即可进入,然后我们点击加号按钮就可以进入扩展管理界面,如下:

这里我们在红色箭头处输入:‘tampermonkey’“,然后点击安装即可。安装成功是这个样子的,如图:

四、选择脚本库

虽然我们已经安装了油猴脚本,但是并不表示现在就可以随心所欲下载资源,进行各种骚操作了,我们还需要下载另一个脚本资源。不过在下载脚本资源之前,我们需要在某个库中查找,因为这些脚本资源目前都集中在库中,目前来说最出名的就是”GreasyFork “和”OpenUserJS “。小编选择的是”GreasyFork “,不因为别的,只是觉得这个网站的布局风格我很喜欢,于是果断选择了它,如图:

五、安装附加脚本

既然我们已经找到最合适的库了,那么接下来就是安装附加的脚本了,这里我们需要下载一个脚本,名为”网盘助手“,选择最新版本的网盘助手,如图:

点击进去,然后进行下载,如图:

这里我们可以在油猴的界面去查看当前下载的脚本的状态,如图:

可以看到,这里小编下载了两个脚本。

六、下载文件它就是解除

接下来就是最重要的时刻,做了那么多还不就是为下载文件做铺垫吗?那么我们该怎么做了?首先小编要说明的一点就是,你必须先把这个要下载的文件保存到百度网盘中才可以 ,那么废话不多说,保存我想大家都会,那就看网盘里有啥资源吧,我们随便选择一个资源,如图:

可以看到,选择了之后就会出现一些其它的选项,我们选择生成链接,然后会出现一个链接,如图:

我们点击这个链接,如图:

这样就弹出了下载链接了,我们选择好下载路径后直接点击下载,如图:

静静等待下载,一切大功告成。

七、总结

其实,像这样的神器在油猴中还有许多,这只是其中的一个而已,油猴上有很多优秀的脚本,好用到哭。

说说Python集合的那些事儿

大家好,我是IT共享者,人称皮皮。今天给大家来捋一捋Python集合。

一、什么是集合?

集合(set)和字典(dict)类似,它是一组 key 的集合,但不存储 value。集合的特性就是:key 不能重复。

二、集合常用操作

1. 创建集合

set 的创建可以使用 {} 也可以使用 set 函数:

s1 = {'a', 'b', 'c', 'a', 'd', 'b'}  # 使用 {}
print(s1)
(['a', 'c', 'b', 'd'])

s2 = set('helloworld')  # 使用 set(),接收一个字符串
print(s2)
set(['e', 'd', 'h', 'l', 'o', 'r', 'w'])
s3 = set(['.mp3', '.mp4', '.rmvb', '.mkv', '.mp3'])  # 使用 set(),接收一个列表
print(s3)
set(['.mp3', '.mkv', '.rmvb', '.mp4'])

说说Python集合的那些事儿

2. 遍历集合

s = {'a', 'b', 'c', 'a', 'd', 'b'}
for e in s:
    print(e)

说说Python集合的那些事儿

3. 添加元素

add() 方法可以将元素添加到 set 中,可以重复添加,但没有效果。

s = {'a', 'b', 'c', 'a', 'd', 'b'}
print(s)
set(['a', 'c', 'b', 'd'])
s.add('e')
print(s)
set(['a', 'c', 'b', 'e', 'd'])
s.add('a')
print(s)
set(['a', 'c', 'b', 'e', 'd'])
s.add(4)
print(s)
set(['a', 'c', 'b', 4, 'd', 'e'])

说说Python集合的那些事儿

4. 删除元素

remove() 方法可以删除集合中的元素, 但是删除不存在的元素,会抛出 KeyError,可改用 discard()

例子:

s = {'a', 'b', 'c', 'a', 'd', 'b'}
print(s)
set(['a', 'c', 'b', 'd'])
s.remove('a')  # 删除元素 'a'
print(s)
set(['c', 'b', 'd'])
s.remove('e')  # 删除不存在的元素,会抛出 KeyError

说说Python集合的那些事儿

s = {'a', 'b', 'c', 'a', 'd', 'b'}
print(s)
set(['a', 'c', 'b', 'd'])
s.remove('a')  # 删除元素 'a'
print(s)
set(['c', 'b', 'd'])
s.discard('e')  # 删除不存在的元素, 不会抛出 KeyError

说说Python集合的那些事儿

三、交集/并集/差集

Python 中的集合也可以看成是数学意义上的无序和无重复元素的集合,因此,我们可以对两个集合作交集、并集等。

看看例子:

s1 = {1, 2, 3, 4, 5, 6}
s2 = {3, 6, 9, 10, 12}
s3 = {2, 3, 4}
print(s1 & s2 ) # 交集
set([3, 6])
print(s1 | s2)  # 并集
set([1, 2, 3, 4, 5, 6, 9, 10, 12])
print(s1 - s2)  # 差集
set([1, 2, 4, 5])
print(s3.issubset(s1))  # s3 是否是 s1 的子集

print(s3.issubset(s2))  # s3 是否是 s2 的子集

print(s1.issuperset(s3))  # s1 是否是 s3 的超集

print(s1.issuperset(s2))  # s1 是否是 s2 的超集

说说Python集合的那些事儿

四、总结

本文主要介绍了Python的另外一种形式(集合),通过讲解集合中如何去创建集合,遍历集合,解释了两种常见的集合操作,添加元素和删除元素。最后通过一个小项目,介绍了集合之间中的三种关系。希望能够帮助大家更好的学习。

一篇文章教会你进行Mysql数据库和数据表的基本操作

通常情况下,我们都是通过mysql.exe(客户端),连接mysql服务的。

但是有个问题。

  • 第一个问题就是太丑了。
  • 第二个问题是因为这不会自动提示啊…,早都习惯了各种自动提示工具,在用这么Low的

安装

下一步下一步就可以了!!!

破解

管理员运行PatchNavicat

打开之后,游览到安装Navicat for MySQL的目录,完成即可。

新建查询

连接好之后,点击查询,再点击新建查询,就可以写SQL了。

关于Mysql的一些概念理解

需要先理清一个概念,Mysql不是数据库。

我们连接的是Mysql服务,不是数据库

所以当别人听到连接数据库时,其实指的是连接跑起来的Mysql服务。

数据库的理解

数据库可以理解为文件夹

通过show DATABASES;命令查看自己下面有哪些数据库

再切换到<mysql安装位置>\data下。

同样可以发现有这个几个文件夹

如果再<mysql安装位置>\data新建一个文件夹

再通过show DATABASES;命令查看当前有哪些数据库,可以发现确实多了刚才新建文件夹(数据库)。

所以就得出了一个结论,数据库其实就是一个文件夹。

数据表的理解

数据库相当于文件夹,那数据库里面放的,就是数据表了。

表内容

其实会发现,数据表Excel很相似。

Excel有啥数据表也有啥。

通常都是表头(蓝色框),表内容(红色框)

总结

数据库就是一个个文件夹

数据表是不能单独存在的,需要放在数据库中,xlsx举例使用。

数据库又分表头,表内容,,

数据库相关命令

查看当前Mysql下的数据库

命令

show DATABASES;

结果

使用数据库

使用数据库的意思就是。

数据库其实就是一个个文件夹,使用数据库就是进入这个数据库,相当于进入到这个文件夹里里面。

命令

use <数据库名字>;
# 例如 use <mysql> 进入mysql这个数据库,

在日常使用中,要操作哪个数据库里面的表,一定要use 这个数据库

创建数据库

命令

CREATE DATABASE <数据库名称> DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
# 示例,创建一个school数据库
CREATE DATABASE school DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

执行结果

删除数据库

DROP <数据库名称>
# 示例,删除 school 数据库
DROP school

数据表相关命令

记得一定要use 数据库,进入数据库才能操作表。

创建表

格式

create table 表名(
    列名  列类型  [其他参数1 其他参数2 ...],
    列名  列类型  [其他参数1 其他参数2 ...]
...
)ENGINE=InnoDB DEFAULT CHARSET=utf8

其他参数包括有

  • 是否可以为空
  • not null — 不可空
    null — 可空
  • 默认值
  • defalut 2 — 默认2
  • 自增自增一般用在id上,并且只能有一个自增列,插入时不需要管这个列,会自动添加值。
  • auto_increment — 自增
    — 虽然自增加这一个关键字就行了,但是由于主键是不能为空的,所以要配合其他关键字
    not null auto_increment primary key
  • 主键主键,一种特殊的唯一索引,不允许有空值。如果主键使用单个列,则它的值必须唯一。如果是多列,则其组合必须唯一。

  • primary key(nid,num)
  • 外键
  • constraint fk_cc foreign key (color_id) references color(nid)

其他参数一一对应上就行了。

示例

创建一个老师表

create table teacher(
    id  int not null auto_increment PRIMARY key,
    teacher_name varchar(16) not null
)ENGINE=InnoDB DEFAULT CHARSET=utf8

查看数据库有哪些表

命令

show TABLES;

结果

删除表

drop table <表名>

清空表

delete from <表名>
truncate table <表名>

总结

其实这章讲的还是比较简单的,在使用Mysql时,一定要注意一个问题,就是sql后面一定要加一个;

这章主要讲的是数据库的操作数据表的操作。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

敬往事一杯酒,自此不再回头。

Vue的学习笔记(下篇)

一、什么是Vue.js?

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

前面几天我们已经分享了Vue的学习笔记(中篇)和Vue的学习笔记(上篇),今天我们一起来看看下篇。

二、Vue的v-for循环

(一)v-for循环普通数组

1.在data中定义普通数组;

data(){
return{
list: [1, 2, 3, 4, 5]
}
}

2.在html中使用v-for指令渲染;

<p v-for="(item, i) in list">索引值是:{{i}} --- 每一项的值是:{{item}}</p>

3.效果图如下图:

Vue的学习笔记(下篇)

(二)v-for循环对象数组

1.在data 中定义对象数组;

data(){
return{
        list: [
  { id: 1, name: 'zhan1' },
  { id: 2, name: 'zhan2' },
  { id: 3, name: 'zhan3' },
  { id: 4, name: 'zhan4' }
]
}
}

2.在html中使用v-for指令渲染:

<p v-for="(user, i) in list">Id:{{ user.id }} --- 名字:{{ user.name }} --- 索引值是:{{i}}</p>

3.效果图如下图:

Vue的学习笔记(下篇)

(三)v-for循环对象,在遍历对象的身上的键值对时候,除了有val、key,在第三个位置还有一个索引值。

1.在data定义一个对象;

data(){
return{
user: {
        id: 1,
        name: 'zhan',
        gender: '男'
   }
}
}

2.在html中使用v-for指令渲染:

<p v-for="(val, key, i) in user">值是:{{ val }} --- 键是:{{key}} -- 索引值是:{{i}}</p>

3.效果图如下图:

Vue的学习笔记(下篇)

(四)v-for迭代数字 ###在in后面我们放过普通数组、对象数组、对象,还可以放数字,如果使用v-for迭代数字的时候,前面的count值的从1开始。

1.在html中使用v-for指令渲染:

<p v-for="count in 5">这是第 {{ count }} 次循环</p>

2.效果图如下图:

Vue的学习笔记(下篇)

(五)v-for循环中key属性的使用

v-for 循环的时候,key 属性只能使用number获取string,在key使用的时候,必须使用v-bind属性绑定的形式,指定key的值,在组件中,使用v-for循环的时候,如果有v-for的同时,指定唯一的字符串/数字类型:key的值。

1.在data 中定义对象数组;

data(){
return{
        list: [
  { id: 1, name: 'zhan1' },
  { id: 2, name: 'zhan2' },
  { id: 3, name: 'zhan3' },
  { id: 4, name: 'zhan4' }
]
}
}

2.在html中使用v-for指令渲染代码如下图:

Vue的学习笔记(下篇)

3.效果图如下图:

Vue的学习笔记(下篇)

三、Vue过滤器的基本使用

1.首先定义一个 Vue 全局的过滤器,名字叫做msgFormat,字符串的replace方法的第一个参数,除了可以写一个字符串之外,还可以定义一个正则。

2.在js的代码中,如以下代码:

Vue.filter('msgFormat', function (msg, arg, arg2) {
  return msg.replace(/day/g, arg + arg2)
})


Vue.filter('test', function (msg) {
  return msg + '========'
})

3.在html代码中,如以下代码:

<p>{{ msg | msgFormat('我', '123') | test }}</p>

4.在data中,定义一个msg:

data(){
return{
msg:'the day is cloudless'
}
}

5.效果图如下图:

Vue的学习笔记(下篇)

四、总结

1.vue中的v-for循环有普通数组、对象数组、对象、迭代数字、key属性的使用,这些用法的详解,希望对大家有所帮助。

2.vue过滤器的基本使用局部过滤器优先于全局过滤器被调用,一个表达式可以使用多个过滤器,过滤器之间需要用管道符“|”隔开,其执行顺序从左往右。

3.这些代码比较简单,希望对你有帮助!

Vue的学习笔记(中篇)

一、什么是Vue.js?

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。上篇文章我们讲述了基础,可以戳这里:Vue的学习笔记(上篇)。这篇文章我们继续捋一捋~

二、Vue中使用样式class

第一种使用方式,传递一个数组,这里的class需要使用v-bind的数据绑定;

<h1 :class="['thin', 'italic']">hello world1!</h1>

第二种使用方式,在数组中使用三元表达式;

<h1 :class="['thin', 'italic', flag?'active':'']">hello world2!</h1>

第三种使用方式,在数组中使用对象来代替三元表达式,来提高代码的可读性;

<h1 :class="['thin', 'italic', {'active':flag} ]">hello world3!</h1>

在为class使用v-bind绑定对象时候,对象的属性是一个类名,由于对象的属性可以带引号,也可以不带,属性的值是一个标识符;

<h1 :class="classObj">hello world!</h1>

在css的样式代码如下图:

在js的代码如下图

效果图如下图:

三、Vue中样式style:vue中样式是动态绑定style,对象是不需要键值对的集合。

第一种使用方式是将键值对的对象写在data中,直接的动态绑定;

<h1 :style="styleObj1">The first H!!</h1>

第二种使用方式是多个键值对对象,使用数组方式,依次写入;

<h1 :style="[ styleObj1, styleObj2 ]">The first H1!!</h1>

在js的代码如下图:

效果图如下图:

四、v-if和v-show的使用

v-if的特点:每次都会重新删除或创建元素,有较高的切换性能消耗。

v-show的特点:每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式,有较高的初始渲染消耗。

v-if和v-show的使用:

如果元素涉及到频繁的切换,最好不要使用 v-if, 而是使用 v-show,如果元素可能永远也不会被显示出来被用户看到,则使用v-if。

1.在html代码中,如以下的代码:

<input type="button" value="toggle" @click="flag=!flag">
<h3 v-if="flag">这是用v-if控制的元素</h3>
<h3 v-show="flag">这是用v-show控制的元素</h3>

2.在data中定义一个flag,如以下的代码;

data(){
      return{
        flag: false,
  }
}

3.效果图如下图:

五、总结

1.在vue中使用样式class,有三种方式传递一个数组、数组中的三元表达式、使用对象来代替三元表达式,在为class使用v-bind绑定对象,对象属性是一个类名,属性的值是一个标识符。

2.在vue中使用样式style,vue中样式动态绑定style,对象是不需要键值对的集合,有两种方式将键值对的对象写在data中直接的动态绑定、多个键值对对象,使用数组方式,依次写入。

3.vue-show本质是标签display设置为none,控制隐藏,vue-if是动态的向DOM树内添加或者删除DOM元素。

4.代码比较简单,希望对你有帮助!

Vue的学习笔记(上篇)

一、什么是Vue.js?

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

二、什么是v-model指令?

v-model指令是:它负责监听用户输入事件,从而更新数据,并对一些极端场景进行一些特殊的处理。使用v-model指令,可以实现表单元素和Model中数据的双向数据绑定,v-model只能运用在表单元素中。

怎么使用v-model指令?

1、首先创建一个组件,在src/components/文件夹下新建一个day01.vue。

2、在day01.vue写p元素和input元素,在input元素使用v-model。

3、在App.vue导入这个day01.vue组件,然后在template中加入day标签。

代码如下图所示:

Vue的学习笔记(上篇)

效果图:

Vue的学习笔记(上篇)

三、使用v-model实现简单的加减乘除计算器

1、在template里实现页面布局;

2、在data定义n1和n2表示第一个数和第二个数,result表示结果、opt表示加减乘除;

3、在methods里处理自定义的方法,使用swith表达式实现加减乘除。

代码如下图所示:

Vue的学习笔记(上篇)

Vue的学习笔记(上篇)

效果图:

Vue的学习笔记(上篇)

四、实现跑马灯的效果

1、 给跑马灯滚动按钮,绑定一个点击事v-on或@;

2、 在按钮的事件处理函数中,写相关的业务逻辑代码:拿到 msg 字符串,然后调用字符串的 substring 来进行字符串的截取操作,把第一个字符截取出来,放到最后一个位置;

3、为了实现点击下按钮,自动截取的功能,放到一个定时器中去;

代码如下图所示:

Vue的学习笔记(上篇)

Vue的学习笔记(上篇)

效果图:

Vue的学习笔记(上篇)

五、总结

1、使用v-model 指令,实现表单元素和 Model 中数据的双向数据绑定,v-model只能运用在表单元素中。使用v-model实现简单的计算器,对v-model进一步的了解。

2、代码比较简单,希望可以帮助到你。

浅析装饰器的那些事儿

一、装饰器的简单定义

外层函数返回里层函数的引用,里层函数引用外层函数的变量。

二、装饰器的作用

通俗来讲装饰器的作用就是在不改变已有函数代码前提下,为该函数增加新的功能。

def run():
   print('我会跑')
fun()

现在我想在原有函数的基础上新增一个功能:我会唱歌。这个时候利用装饰器则轻松可以帮我们实现这个功能。

三、实例理解

(1)不传参的装饰器

def outer(fun):
   def inner():
      fun()  //fun是外层函数的变量,在inner里面用
   return inner //inner就是里层函数的引用

(2)传递参数的装饰器:

def func(fun):
   def add(*args,**kwarge):
      return fun(*args,**kwargs)
   return add

现在对于装饰器的基本格式有一定的了解,就可以直接写函数了。下面实现文章开头的 我会唱歌 的功能

def outer(fun):
    def inner(*args, **kwarge):
        print("我会唱歌")
        return fun(*args, **kwarge)
    return inner

四、如何使用装饰器

方法一:使用@符号+装饰器的名字   把它放在想要装饰函数的上一行即可
@outer
def run():
   print('我会跑')
   
run()




方法二:
def run():
    print('我会跑')


run=outer(run)   #就等价于@outer
run()


最终打印结果是:
我会唱歌
我会跑

如果我想知道fun 传递的参数是什么,在装饰器内部可以使用如下方式:

def outer(fun):
    a = 1
    def inner(*args, **kwarge): # args是一个数组,kwargs一个字典
        print(fun.__name__) #打印fun接收的函数的名字
        print("我会唱歌")
        return fun(*args, **kwarge)
    return inner

但是如果我们 print(run.__name__,6666666) 输出的结果是inner,并不是我们想要的run,这里的函数被warpTheFunction替代了。它重写了我们函数的名字和注释文档(docstring)。解决方法如下:

from functools import wraps


def outer(fun):
    @wraps(fun)
    def inner(*args, **kwargs):
        print(fun.__name__,11111111111)
        print("我会唱歌")
        return fun(*args, **kwargs)
    return inner


@outer
def run():
   print('我会跑')
   
 print(run.__name__,6666666)  //输出结果为 run 666666

五、自己实现装饰器

def subuser_keymanage(view_func):
    '''功能是实现用户管理权限的判定'''
    def _wrapper_view(request, *args, **kwargs):
        user = request.user #一个Customer对象,包含了用户名/密码等信息
        customer = user.customer.customer_id #用户的id
        select_status = get_curuser_permission(user=user, customer=customer)#调用函数返回的值有两种0和1
        if not select_status:#如果返回0表示没有权限,返回错误码
            return render_response(request, ErrorCode.FAILED)
        return view_func(request, *args, **kwargs)
    return _wrapper_view
@subuser_keymanage 
def generate_subuser_ak_sk(request):
    params = json.loads(request.body) #获取卡前端传递的参数
    user_id_only = params.get("user_id") #获取用户表示id值
    中间代码就忽略了......
    return render_response(request, ErrorCode.FAILED)

六、装饰器小结

通过装饰器很大程度上可以减少代码的复用,在代码规范中这一点是很重要的。

以上就是装饰器的基本知识,即便没有任何基础,按照作者的思路,套用固定的格式,不需要完全理解,只要按照流程一步一步就能写出高端大气上档次的装饰器了,恭喜你!

前方高能请注意:装饰器传参,三层嵌套函数一般用的比较少,其实也不难,一层一层看,跟上文讲的一样,仅作为知识的拓宽。

import logging
def use_logging(level):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if level == "warn":
                logging.warn("%s is running" % func.__name__)
            elif level == "info":
                logging.info("%s is running" % func.__name__)
            return func(*args)
        return wrapper


    return decorator


@use_logging(level="warn")
def foo(name='foo'):
    print("i am %s" % name)


foo()
i am foo
WARNING:root:foo is running

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

手把手教你使用CSS3为文本和元素实现添加阴影效果

使用CSS3,你可以为文本和元素添加阴影。

一、浏览器支持

表中的数字指定完全支持该属性的第一个浏览器版本。

数字后面的 -webkit- 或者 -moz- 使用时需要指定前缀。

属性

Chrome

Firefox

Safari

Opera

IE

text-shadow

4.0

10.0

3.5

4.0

9.5

box-shadow

10.0 4.0 -webkit-

9.0

4.0 3.5 -moz-

5.1 3.1 -webkit-

10.5

二、CSS3 阴影的文字特效

CSS代码:

<!DOCTYPE CSS>
<CSS lang="en">
<head>
  <meta charset="UTF-8">
  <title>项目</title>
</head>
<body>
  <h1>文本阴影效果!</h1>


  <p><b>注意:</b> IE9和更早的版本, 不支持text-shadow属性.</p>
</body>
</CSS>

CSS3 文本阴影

CSS3 text-shadow 属性应用阴影到文本上.

在简单的用法, 你可以在水平方向设置阴影(2px)和垂直方向设置阴影(2px):

h1 {
    text-shadow: 2px 2px;
}

添加一个颜色到阴影:

h1 {
    text-shadow: 2px 2px red;
}

显示一个带有黑色阴影的白色文本:

 h1 {
        color: white;
        text-shadow: 2px 2px 4px #000000;
    }

下面的例子显示了红色霓虹灯的阴影:

  h1 {
        text-shadow: 0 0 3px #FF0000;
    }


多重阴影

要在文本中添加多个阴影,可以添加逗号分隔的阴影列表。

下面的实例显示了一个红色和蓝色的霓虹灯阴影:

h1 {
    text-shadow: 0 0 3px #FF0000, 0 0 5px #F00000;
}

下面实例显示了一个白色文本带有黑色,蓝色和深蓝色阴影:

h1 {
    text-shadow: 0 0 3px #FF0000, 0 0 5px #0000FF;
}


三、box-shadow 属性

CSS3 box-shadow 属性应用阴影到元素上.

在最简单的用法中,只指定水平阴影和垂直阴影:

一个黄色的 <div> 元素使用一个黑色box-shadow

   div {
        width: 300px;
        height: 100px;
        padding: 15px;
        background-color: yellow;
        box-shadow: 10px 10px;
    }

下一步,添加一个颜色到阴影,对阴影添加模糊效果:

一个黄色的 <div>元素带模糊红/灰 box-shadow。

 div {
        width: 300px;
        height: 100px;
        padding: 15px;
        background-color: yellow;
        box-shadow: 10px 10px 5px grey;
    }

案例

添加阴影到 ::before 和 ::after 伪类中, 来创建一个有趣的效果。

<!DOCTYPE CSS>
<CSS lang="en">
<head>
  <meta charset="UTF-8">
  <title>项目</title>
  <style>
  #boxshadow {
      position: relative;
      -moz-box-shadow: 1px 2px 4px rgba(0, 0, 0,0.5);
      -webkit-box-shadow: 1px 2px 4px rgba(0, 0, 0, .5);
      box-shadow: 1px 2px 4px rgba(0, 0, 0, .5);
      padding: 10px;
      background: white;
  }


  /* Make the image fit the box */
  #boxshadow img {
      width: 100%;
      border: 1px solid #8a4419;
      border-style: inset;
  }


  #boxshadow::after {
      content: '';
      position: absolute;
      z-index: -1; /* hide shadow behind image */
      -webkit-box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
      -moz-box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
      box-shadow: 0 15px 20px rgba(0, 0, 0, 0.3);
      width: 70%;
      left: 15%; /* one half of the remaining 30% */
      height: 100px;
      bottom: 0;CSS
  }
</style>
</head>
<body>
  <div id="boxshadow">
    <img src="img/fy_indexBg.jpg" alt="Norway" width="600" height="400">
  </div>
</body>
</CSS>             

四、总结

本文基于CSS基础,使用CSS语言。介绍了有关CSS阴影效果的应用,从基础的文本阴影入手, 对CSS常见的阴影表示效果都做了一一的讲解。通过一个个实例的演示,实例运行的效果图。希望能够帮助你更好的学习CSS。

看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

手把手教你进行Mysql5.x版本的安装及解决安装过程中的bug

前言

Hey,大家好,我是码农星期八,似乎还没有更新过关于Mysql的相关文章,同时也是因为工作需要,一起来学学叭。

数据库种类

常见的数据库有Mysql,Oracle,SQLite,Access,MS SQL Server。

这时候可能有人一看,what?数据库这么多,我要全部都学吗???,学这么多需要多久,是不是又是几个月。。。

我的回答是,只要学好Mysql,学会其他都是分分钟的事,数据库很多东西都是相似的,基本可以照搬使用。

需要说明的是,我们学习的是SQL语法,Mysql,Oracle只是软件,SQL语法可以让我们和这些软件进行交流,实现各种功能。

本次系列就以常用的Mysql进行讲解。

安装

下载

地址
:https://dev.mysql.com/downloads/mysql/

注意的是,这个地址是最新版本的下载地址。

但是通常情况下,我们可能选择老版本的可能性会比较大,毕竟兼容性更强,BUG更少。

历史版本下载地址

地址
:https://downloads.mysql.com/archives/community/

本教程以Mysql 5.7.27版本,win7 32位系统操作,下载的是ZIP Archive版本

各位下载就好了,这里就不做举例了!!!

下载好,解压

下载好之后,放一个有意义的目录,并且进行解压。

我一般会将软件放在其D:/programeFile文件夹下,所以这次还放到这。

初始化

如果上述都完成之后,需要进行初始化,需要cmd进到刚才的mysql-5.7.27-winx64\bin目录下。

执行命令

mysqld.exe --initialize-insecure

执行结果

如果初始化时出现…MSVCP120.dll…错误

如果出现这个错误,在这里只需要安装Visual C++ Redistributable Packages for Visual Studio 2013就行。

安装包vcredistx86x64.zip

下一步下一步就好了, 安装好之后再执行mysqld.exe –initialize-insecure即可。

将Mysql制作成服务

这里要说明一下,mysqld.exe是服务端,运行mysqld.exe,相当于Mysql服务端跑起来了客户机才能远程连接,进行各种操作。

还有一个是mysql.exe,这个是客户端,用这个来连接跑起来的mysqld.exe服务。

如上所说,我们只需要将mysqld.exe跑起来,其实就可以对外提供服务了

但是只一个黑洞洞的窗口,不是太好看,如果我们将它制作成服务,就静默在后台运行了。

还是切换到<数据库安装目录>/bin目录下。

执行命令

mysqld.exe --install

执行成功效果

如果提示Install/Remove of the Service Denied!

如果提示这个,说明权限不够,使用管理员方式打开cmd,切换到数据库安装目录,再执行上述命令即可。

服务已经安装成功

启动/关闭 Mysql服务

上述都完成之后,我们还需要两条命令。

# 启动MySQL服务
net start mysql
# 关闭MySQL服务
net stop mysql

连接Mysql服务

如果上述都完成,那你的Mysql服务必定启动

我们来尝试一下连接服务器。

上述我们说到,mysqld.exe才是服务端,并且我们也将mysqld.exe制作成了服务静默跑在后台。

mysql.exe才是客户端,需要连接服务端(做成服务的mysqld.exe)

还是在<数据库安装目录>/bin下

执行命令

mysql.exe -u root -p

如果如图所示,就表示成功连接Mysql服务端。

总结

本次文章主要讲述如何进行安装Mysql,并且使用的版本是5.x的版本。

不是最新的版本,就是为了防止一些不可预估的情况。

并且我们将Mysql制作成了服务,还是永远直接启动的,开机自启的,这就方便了下次连接。

最后我们使用Mysql提供的客户端进行连接测试,发现是没问题的,并且用户名默认root,没有密码。

如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。

敬往事一杯酒,自此不再回头。我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。

看完本文有收获?请转发分享给更多的人

IT共享之家

入群请在微信后台回复【入群】

——————- End ——————-

往期精彩文章推荐: