数据库基础操作-part2
单表和多表查询
单表查询
记录详细操作:
增
insert into t1(字段1, 字段2, 字段3) values
(值1, 值2, 值3),
(值1, 值2, 值3),
(值1, 值2, 值3);
改
update t1 set
字段1 = 值1,
字段2 = 值2,
where 条件;
删除
delete from 表 where 条件; -- auto_increment自增记录不会被删除
truncate 表; -- 将auto_increment清空
show create table name; -> 查看创建表信息
查
select distinct 字段1, 字段2, 字段3 from 表
where 条件
group by 分组字段
having 条件
order by 排序字段
limit 限制条数
1. 简单查询
select * from employee;
select name, post from employee;
select distinct post from employee; -- 筛选掉重复的
select name as 名字, salary*12 as annual_salary from employee; -- 修改字段名
-- 拼接字符串. 可用于表数据迁移. 将数据进行concat拼接后通过create table 新表名...复制到新表中
select concat("名字:", name) as new_name, concat("薪资:", salary) from employee;
select concat_ws(":", name, post, salary) from employee;
-- 表筛选查询(了解即可)
select (
case
when name = 'egon' then
name
when name = "alex" then
concat(name, "_bigsb")
else
concat(name, 'sb')
end
) as new_name from employee;
2. where
select * from employee where id >= 10;
select * from employee where id >= 10 and id <= 13;
select * from employee where id between 10 and 13;
select * from employee where id = 10 or id = 13 or id = 15;
select * from employee where id in (10, 13, 15);
select * from employee where name like "Ma%" -- 模糊查询
3. group by
聚合函数
max
min
sum
avg
count
select post, max(salary) from employee group by post;
select post, min(salary) from employee group by post;
select post, avg(salary) from employee group by post;
select post, sum(salary) from employee group by post;
select post, count(id) from employee group by post;
-- 取出每个性别的人数
select sex, count(id) from employee group by sex;
-- 案例1: 取出每个部门男员工的平均薪资
select post, avg(salary) from employee where sex = "male" group by post;
-- 案例2: 取出每个部门年龄大于20的员工的最大薪资
select post, max(salary) from employee where age <= 20 group by post;
4.having
-- 取出男员工平均薪资大于10000的部门
select post, avg(salary) from employee where sex = "male" group by post having avg(salary) > 10000;
select salary from employee where max(salary) > 1000; -- 该语句错误
select max(salary) from employee; -- 因为顺序原因. 只有where不能使用聚合函数
5. order by 排序
select * from employee order by age asc; -- ascend -> 升
select * from employee order by age desc; -- descend -> 降
select * from employee order by age asc, id desc -- 出现相同的继续排序
-- 取出男员工的平均薪资大于10000的部门并且按照平均薪资降序排序
select post, avg(salary) from employee where sex = "male" group by post having avg(salary) > 10000
order by avg(salary) desc;
6. limit
select * from employee limit 3;
-- 取年龄最大的员工的所有信息
select * from employee order by age desc limit 1;
select * from employee limit 0, 5;
select * from employee limit 5, 5;
select * from employee limit 10, 5;
7. regexp -> 正则表达式
select * from employee where name regexp "^M.*u$"
链表查询
# 创建表格
create table department(
id int primary key,
post varchar(16)
);
insert into department values
(200, "技术"),
(201, "人力资源"),
(202, "销售"),
(203, "运营");
# 内链接(inner join): 只保留有对应关系的记录
select * from employee, department where employee.dep_id = department.id;
Output:
+------+----------+----+----------+--------+--------+-----+--------+
| id | name | id | name | salary | sex | age | dep_id |
+------+----------+----+----------+--------+--------+-----+--------+
| 200 | 技术 | 1 | Mokeke | 100000 | female | 18 | 200 |
| 200 | 技术 | 3 | xiaoergu | 3000 | female | 27 | 200 |
| 201 | 人力资源 | 4 | longge | 8000 | male | 37 | 201 |
| 201 | 人力资源 | 6 | ocean | 10000 | male | 47 | 201 |
| 200 | 技术 | 7 | peiyao | 5000 | male | 78 | 200 |
+------+----------+----+----------+--------+--------+-----+--------+
select * from employee inner join department on employee.dep_id = department.id;
Output:
+----+----------+--------+--------+-----+--------+------+----------+
| id | name | salary | sex | age | dep_id | id | post |
+----+----------+--------+--------+-----+--------+------+----------+
| 1 | Mokeke | 100000 | female | 18 | 200 | 200 | 技术 |
| 3 | xiaoergu | 3000 | female | 27 | 200 | 200 | 技术 |
| 4 | longge | 8000 | male | 37 | 201 | 201 | 人力资源 |
| 6 | ocean | 10000 | male | 47 | 201 | 201 | 人力资源 |
| 7 | peiyao | 5000 | male | 78 | 200 | 200 | 技术 |
+----+----------+--------+--------+-----+--------+------+----------+
# 左链接(left join): 在内链接的基础上保留左表的记录
select * from employee left join department on employee.dep_id = department.id;
Output:
+----+----------+--------+--------+-----+--------+------+----------+
| id | name | salary | sex | age | dep_id | id | post |
+----+----------+--------+--------+-----+--------+------+----------+
| 1 | Mokeke | 100000 | female | 18 | 200 | 200 | 技术 |
| 3 | xiaoergu | 3000 | female | 27 | 200 | 200 | 技术 |
| 7 | peiyao | 5000 | male | 78 | 200 | 200 | 技术 |
| 4 | longge | 8000 | male | 37 | 201 | 201 | 人力资源 |
| 6 | ocean | 10000 | male | 47 | 201 | 201 | 人力资源 |
| 2 | Maxs_Hu | 100001 | male | 17 | 204 | NULL | NULL |
| 5 | egon | 3000 | female | 15 | 204 | NULL | NULL |
| 8 | qinjun | 41239 | male | 23 | 204 | NULL | NULL |
+----+----------+--------+--------+-----+--------+------+----------+
# 右链接(right join): 在内链接的基础上保留右表的记录
select * from employee right join department on employee.dep_id = department.id;
Output:
+------+----------+--------+--------+------+--------+------+----------+
| id | name | salary | sex | age | dep_id | id | post |
+------+----------+--------+--------+------+--------+------+----------+
| 1 | Mokeke | 100000 | female | 18 | 200 | 200 | 技术 |
| 3 | xiaoergu | 3000 | female | 27 | 200 | 200 | 技术 |
| 4 | longge | 8000 | male | 37 | 201 | 201 | 人力资源 |
| 6 | ocean | 10000 | male | 47 | 201 | 201 | 人力资源 |
| 7 | peiyao | 5000 | male | 78 | 200 | 200 | 技术 |
| NULL | NULL | NULL | NULL | NULL | NULL | 202 | 销售 |
| NULL | NULL | NULL | NULL | NULL | NULL | 203 | 运营 |
+------+----------+--------+--------+------+--------+------+----------+
# 全链接(full join): 在内链接的基础上. 左右两边没有对应关系的记录也留下来
select * from employee left join department on department.id = employee.dep_id
union
select * from employee right join department on department.id = employee.dep_id;
Output:
+------+----------+--------+--------+------+--------+------+----------+
| id | name | salary | sex | age | dep_id | id | post |
+------+----------+--------+--------+------+--------+------+----------+
| 1 | Mokeke | 100000 | female | 18 | 200 | 200 | 技术 |
| 3 | xiaoergu | 3000 | female | 27 | 200 | 200 | 技术 |
| 7 | peiyao | 5000 | male | 78 | 200 | 200 | 技术 |
| 4 | longge | 8000 | male | 37 | 201 | 201 | 人力资源 |
| 6 | ocean | 10000 | male | 47 | 201 | 201 | 人力资源 |
| 2 | Maxs_Hu | 100001 | male | 17 | 204 | NULL | NULL |
| 5 | egon | 3000 | female | 15 | 204 | NULL | NULL |
| 8 | qinjun | 41239 | male | 23 | 204 | NULL | NULL |
| NULL | NULL | NULL | NULL | NULL | NULL | 202 | 销售 |
| NULL | NULL | NULL | NULL | NULL | NULL | 203 | 运营 |
+------+----------+--------+--------+------+--------+------+----------+
案例: 选出每个部门及其员工平均年龄
select department.post, avg(age) from employee inner join department on employee.dep_id = department.id
group by employee.post;
Output:
+----------+----------+
| post | avg(age) |
+----------+----------+
| 人力资源 | 42.0000 |
| 技术 | 41.0000 |
+----------+----------+
子查询
-- 选出employee中技术部门的员工信息
select * from employee where dep_id =
(select id from department where post = "技术");
Output:
+----+----------+--------+--------+-----+--------+
| id | name | salary | sex | age | dep_id |
+----+----------+--------+--------+-----+--------+
| 1 | Mokeke | 100000 | female | 18 | 200 |
| 3 | xiaoergu | 3000 | female | 27 | 200 |
| 7 | peiyao | 5000 | male | 78 | 200 |
+----+----------+--------+--------+-----+--------+
-- 选出employee中技术部门和销售部门的员工信息
select * from employee where dep_id in
(select id from department where post = "技术" or post = "销售");
Output:
+----+----------+--------+--------+-----+--------+
| id | name | salary | sex | age | dep_id |
+----+----------+--------+--------+-----+--------+
| 1 | Mokeke | 100000 | female | 18 | 200 |
| 3 | xiaoergu | 3000 | female | 27 | 200 |
| 7 | peiyao | 5000 | male | 78 | 200 |
+----+----------+--------+--------+-----+--------+
子查询运算符: all. any. exists
select * from department
where exists(
select * from employee where employee.dep_id = department.id
);
Output:
+------+----------+
| id | post |
+------+----------+
| 200 | 技术 |
| 201 | 人力资源 |
+------+----------+
单表和链表知识点总结
1. 多表查询
链表查询
select * from t1 inner join t2
on t1.字段 = t2.字段;
select * from t1 left join t2
on t1.字段 = t2.字段;
select * from t1 right join t2
on t1.字段 = t2.字段;
select * from t1 left join t2
on t1.字段 = t2.字段
union
select * from t1 right join t2
on t1.字段 = t2.字段;
完整的select查询:
select distinct 字段1, 字段2 from t1 inner join t2
on t1.字段 = t2.字段
where 条件
group by 分组字段
having 条件
order by 排序字段
limit n;
子查询
select * from t1 where id in (select id from t2);
select * from t1 where id = any(select id from t2);
select * from t1 where id > any(select id from t2);
select * from r1 where id > all(select id from t2);
select * from t2 where exists (...);
not in 不支持null
判断为空可以是 dep_id is not null
数据库其他
pymysql 和sql注入问题
# -*- encoding:utf-8 -*-
# @time: 2022/9/7 15:29
# @author: Maxs_hu
import pymysql
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
database='spader',
user='root',
password='th20190410'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 可以使后面返回字典格式. 后面好提取
rows = cursor.execute("select * from employee") # 返回条数
cursor.scroll(3, mode='relative') # 相对当前位置移动
cursor.scroll(2, mode='absolute') # 绝对位置移动
res = cursor.fetchall() # 从迭代器中将数据取出
# res1 = cursor.fetchone() # 取一个
# res2 = cursor.fetchone()
# res3 = cursor.fetchone()
# res4 = cursor.fetchmany(3) # 取many个
print(res)
cursor.close()
conn.close()
# ----sql注入问题----
import pymysql
username = input("请输入用户名>>>").strip()
password = input("请输入密码>>>").strip()
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
database="spader",
user="root",
password="th20190410"
)
cursor = conn.cursor()
# sql = 'select * from user_info where name = "%s" and password = "%s"' % (username, password)
# 会出现sql注入现象. 主要是就符号让sql语句改变了意思.
# 1. Maxs_hu" --fjadklfja 后面的"会和前面形成闭合. -- 会将后面的都注释
# 2. 还有更变态的 xxx" or 1=1 -- fjdskfjasd 可以登录成功
rows = cursor.execute("select * from user_info where name = %s and password = %s", args=(username, password))
# print(rows)
if rows:
print("login successful")
else:
print('username or password error')
# ---- 增删改查操作 ----
import pymysql
conn = pymysql.connect(
host="127.0.0.1",
port=3306,
database="spader",
user='root',
password="th20190410"
)
cursor = conn.cursor()
rows = cursor.execute("insert into user_info values ('xxxx', 'fasdklfasdjk')")
res = cursor.fetchall()
print(res)
# 属于第三种: 自动开启事务. 但是要手动提交
# 第一种: 自动开启事务和提交
# 第二种: 手动开启事务和提交
conn.commit()
cursor.close()
conn.close()
相关函数文档
配合sql语句一起使用. 函数较多. 需要的时候可以对着文档查
-- date_format()函数
select date_format(sub_time, "%Y-%m"), count(id) from blog group by date_format(sub_time, "%Y-%m");
一些函数文档总结:
一.聚合函数
AVG 返回组中值的平均值。空值将被忽略
BINARY_CHECKSUM 返回对表中的行或表达式列表计算的二进制校验值。BINARY_CHECKSUM 可用于检测表中行的更改
CHECKSUM 返回在表的行上或在表达式列表上计算的校验值。CHECKSUM 用于生成哈希索引
CHECKSUM_AGG 返回组中值的校验值。空值将被忽略
COUNT 返回组中项目的数量
COUNT_BIG 返回组中项目的数量。COUNT_BIG 的使用与 COUNT 函数相似。它们之间的唯一差别是它们的返回值:COUNT_BIG 总是返回 bigint 数据类型值,而 COUNT 则总是返回 int 数据类型值
GROUPING "是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。
仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组"
MAX 返回表达式的最大值
MIN 返回表达式的最小值
SUM 返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略
STDEV 返回给定表达式中所有值的统计标准偏差
STDEVP 返回给定表达式中所有值的填充统计标准偏差
VAR 返回给定表达式中所有值的统计方差。
VARP 返回给定表达式中所有值的填充的统计方差。
二.数学函数
ABS 返回给定数字表达式的绝对值
ACOS 返回以弧度表示的角度值,该角度值的余弦为给定的 float 表达式;本函数亦称反余弦。
ASIN 返回以弧度表示的角度值,该角度值的正弦为给定的 float 表达式;亦称反正弦
ATAN 返回以弧度表示的角度值,该角度值的正切为给定的 float 表达式;亦称反正切
ATN2 返回以弧度表示的角度值,该角度值的正切介于两个给定的 float 表达式之间;亦称反正切
CEILING 返回大于或等于所给数字表达式的最小整数
COS 一个数学函数,返回给定表达式中给定角度(以弧度为单位)的三角余弦值
COT 一个数学函数,返回给定 float 表达式中指定角度(以弧度为单位)的三角余切值
DEGREES 当给出以弧度为单位的角度时,返回相应的以度数为单位的角度
EXP 返回所给的 float 表达式的指数值
FLOOR 返回小于或等于所给数字表达式的最大整数
LOG 返回给定 float 表达式的自然对数
LOG10 返回给定 float 表达式的以 10 为底的对数
PI 返回 PI 的常量值
POWER 返回给定表达式乘指定次方的值
RADIANS 对于在数字表达式中输入的度数值返回弧度值
RAND 返回 0 到1 之间的随机float 值
ROUND 返回数字表达式并四舍五入为指定的长度或精度
SIGN 返回给定表达式的正 (+1)、零 (0) 或负 (-1) 号
SIN 以近似数字 (float) 表达式返回给定角度(以弧度为单位)的三角正弦值
SQUARE 返回给定表达式的平方
SQRT 返回给定表达式的平方根
TAN 返回输入表达式的正切值
三.日期函数
DATEADD 在向指定日期加上一段时间的基础上,返回新的 datetime 值。
DATEDIFF 返回跨两个指定日期的日期和时间边界数
DATENAME 返回代表指定日期的指定日期部分的字符串
DATEPART 返回代表指定日期的指定日期部分的整数
DAY 返回代表指定日期的天的日期部分的整数
GETDATE 按 datetime 值的 Microsoft SQL Server 标准内部格式返回当前系统日期和时间
GETUTCDATE 返回表示当前 UTC 时间(世界时间坐标或格林尼治标准时间)的 datetime 值
MONTH 返回代表指定日期月份的整数
YEAR 返回表示指定日期中的年份的整数
四.系统函数
APP_NAME 返回当前会话的应用程序名称(如果应用程序进行了设置)。
CASE 表达式 计算条件列表并返回多个可能结果表达式之一(详见PPT资料)
CAST 和 CONVERT 将某种数据类型的表达式显式转换为另一种数据类型(详见PPT资料)
COALESCE 返回其参数中第一个非空表达式
COLLATIONPROPERTY 返回给定排序规则的属性
CURRENT_TIMESTAMP 返回当前的日期和时间。此函数等价于 GETDATE()
CURRENT_USER 返回当前的用户。此函数等价于 USER_NAME()
DATALENGTH 返回任何表达式所占用的字节数
@@ERROR 返回最后执行的 Transact-SQL 语句的错误代码
fn_helpcollations 返回 Microsoft SQL Server 2000 支持的所有排序规则的列表。
fn_servershareddrives 返回由群集服务器使用的共享驱动器名称
fn_virtualfilestats 返回对数据库文件(包括日志文件)的 I/O 统计
FORMATMESSAGE 从 sysmessages 现有的消息构造消息。FORMATMESSAGE 与 RAISERROR 语句的功能相似;但 RAISERROR 立即输出消息而 FORMATMESSAGE 返回编辑后的信息供进一步处理
GETANSINULL 返回会话的数据库的默认为空性。
HOST_ID 返回工作站标识号。
HOST_NAME 返回工作站名称。
IDENT_CURRENT 返回为任何会话和任何作用域中的指定表最后生成的标识值。
IDENT_INCR 返回增量值(返回形式为 numeric(@@MAXPRECISION,0)),该值是在带有标识列的表或视图中创建标识列时指定的
IDENT_SEED 返回种子值(返回形式为 numeric(@@MAXPRECISION,0)),该值是在带有标识列的表或视图中创建标识列时指定的
@@IDENTITY 返回最后插入的标识值
IDENTITY(函数) 只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。(自动采番时可以起到作用)
ISDATE 确定输入表达式是否为有效的日期
ISNULL 使用指定的替换值替换 NULL
ISNUMERIC 确定表达式是否为一个有效的数字类型
NEWID 创建 uniqueidentifier 类型的唯一值
NULLIF 如果两个指定的表达式相等,则返回空值。
PARSENAME 返回对象名的指定部分。可以检索的对象部分有对象名、所有者名称、数据库名称和服务器名称
PERMISSIONS 返回一个包含位图的值,表明当前用户的语句、对象或列权限。
@@ROWCOUNT 返回受上一语句影响的行数
ROWCOUNT_BIG 返回受执行的最后一个语句影响的行数。该函数的功能与 @@ROWCOUNT 一样,除非 ROWCOUNT_BIG 的返回类型是 bigint。
SCOPE_IDENTITY 返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。
SERVERPROPERTY 返回有关服务器实例的属性信息
SESSIONPROPERTY 返回会话的 SET 选项设置
SESSION_USER 是一个 niladic 函数,允许在未指定默认值时将系统为当前会话的用户名提供的值插入到表中。还允许在查询、错误信息等中使用用户名
STATS_DATE 返回最后一次更新指定索引统计的日期
SYSTEM_USER 返回当前系统用户名
@@TRANCOUNT 返回当前连接的活动事务数
USER_NAME 返回给定标识号的用户数据库用户名
五.字符函数
ASCII 返回字符表达式最左端字符的ASCII代码值。
CHAR 将intASCII代码转换为字符的字符串函数。
CHARINDEX 返回字符串中指定表达式的起始位置
DIFFERENCE 以整数返回两个字符表达式的SOUNDEX值之差。
LEFT 返回字符串中从左边开始指定个数的字符。
LEN 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格
LOWER 将大写字符数据转换为小写字符数据后返回字符表达式。
LTRIM 删除起始空格后返回字符表达式
NCHAR 根据Unicode标准所进行的定义,用给定整数代码返回Unicode字符
PATINDEX 返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零
REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式
QUOTENAME 返回带有分隔符的Unicode字符串,分隔符的加入可使输入的字符串成为有效的MicrosoftSQLServer分隔标识符。
REPLICATE 以指定的次数重复字符表达式
REVERSE 返回字符表达式的反转。
RIGHT 返回字符串中从右边开始指定个数的字符
RTRIM 截断所有尾随空格后返回一个字符串
SOUNDEX 返回由四个字符组成的代码(SOUNDEX)以评估两个字符串的相似性
SPACE 返回由重复的空格组成的字符串
STR 由数字数据转换来的字符数据
STUFF 删除指定长度的字符并在指定的起始点插入另一组字符
SUBSTRING 返回字符、binary、text或image表达式的一部分
UNICODE 按照Unicode标准的定义,返回输入表达式的第一个字符的整数值
UPPER 返回将小写字符数据转换为大写的字符表达式
数据库基础操作-part2的更多相关文章
- Mysql数据库基础操作
Mysql数据库基础操作 在mysql数据库中开启使用tab键补全功能 1)修改主配置文件/etc/mysql/my.cnf(mysql和mariadb目录有些不同) vim /etc/mysql/m ...
- C# IV: 数据库基础操作2
需上一篇C# III:数据库基础操作 另外一个经常碰到的数据库操作是,单次执行多个SQL语句,譬如,一次性插入多条数据. 方法一,拼凑长SQL语句 拼凑长SQL语句实际上是String的操作.如下示例 ...
- MySQL数据库----基础操作
一.知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list ...
- MySQL关系型数据库基础操作
MySQL基础 一.MySQL常用数据类型 1.常用数值类型(INT,DOUBLE,FLOAT) ① int 或者 integer 类型: 大小(字节):4字节: 范围: (有符号: -2147483 ...
- MySQL数据库基础操作语句
SQL语言主要用于存取数据.查询数据.更新数据和管理关系数据库系统,分为3种类型: 1.DDL语句 数据库定义语言: 数据库.表.视图.索引.存储过程,例如CREATE DROP ALTER 2.DM ...
- mysql 数据库基础操作
一 知识储备 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student, ...
- python---基础知识回顾(八)数据库基础操作(sqlite和mysql)
一:sqlite操作 SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以 ...
- 10月16日上午MySQL数据库基础操作(创建、删除)
以前用的是鼠标在界面上手动创建,这样创建会比较麻烦,而且还会经常出问题.在其它电脑上要用的话还需要重复操作.所以要使用程序代码操作,能通过代码的就不用手动操作. 在数据库界面选择要用的数据库,双击打开 ...
- mongo数据库基础操作
概念 一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,每个collection可以存放多个文档(document),每个文档都以BSON(binar ...
随机推荐
- ASP.NET MVC之model传值view
控制器中,我们有时会在知道用户名的情况下,再获取相关数据 例如: public ActionResult Index() { UserInfo Entity_Tem ...
- kubernetes集群简单实例搭建
systemctl stop firewalld && systemctl disable firewalldvim /etc/selinux/configSELINUX=disabl ...
- MarkDown语法——更好地写博客
MarkDown语法--更好地写博客 我们在学习过程中要尽量养成编写博客的 好习惯:一方面方便自己在学习之后进行一次汇总,其次自己书写的文章可以在以后的时间里反复查看以便于巩固,在找工作时博客也是被招 ...
- 汽车锂电池行业为啥会选择钡铼BL200系列Profinet分布式IO
近年来,全球新能源汽车的蓬勃发展促进了锂电池行业的发展.随着锂电池标准化程度的提高,电池和模块规格的标准化是未来的发展趋势,也促进了自动化模块生产线的发展. 锂电池模块生产线通过涂胶-电池堆叠-组装- ...
- 照着这个保姆级文档来,虚拟机装CentOS不再踩坑
软件准备 VirtualBox 6.1.26 centOS镜像 接下来我们就开始进行安装: 创建虚拟机 新建虚拟机 点击下一步,调整内存大小 内存大小根据需要调整,然后点击下一步 3. 虚拟硬盘设置 ...
- Python Flask Blueprint 蓝图
Python Flask Blueprint 蓝图 本篇来了解一下 Flask 中 Blueprint 蓝图,什么蓝图 ..就是一个分模块的扩展而已,用来让不同的 业务模块api 分到不同的pytho ...
- 快速新建并配置一个eslint+prettier+husky+commitlint+vue3+vite+ts+pnpm的项目
前置准备 一台电脑 vscode pnpm vscode插件:ESLint v2.2.6及以上 vscode插件:Prettier - Code formatter v9.5.0及以上 vscode插 ...
- Vue $nextTick && 过度与动画
1 # $nextTick 2 # 1.语法: this.$nextTick(回调函数); 3 # 2.作用:在下一次DOM更新结束后执行其指定的回调. 4 # 3.什么时候用:当改变数据后,要基于更 ...
- 如何基于WPF写一款数据库文档管理工具(二)
系列目录 基于WPF重复造轮子,写一款数据库文档管理工具(一) 本篇重点 上次发表了基于WPF重复造轮子,写一款数据库文档管理工具(一) 得到不少人支持,文章一度上到了博客园推荐表首页,看来大家对这个 ...
- 论文解读(PPNP)《Predict then Propagate: Graph Neural Networks meet Personalized PageRank》
论文信息 论文标题:Predict then Propagate: Graph Neural Networks meet Personalized PageRank论文作者:Johannes Gast ...