Python 连接数据源与邮件功能(九)
文章目录
- 一、概述
- 二、Python 连接数据源
- 1)Python MySQL 基础操作
- 1、部署MySQL
- 2、MySQL Connector 库
- 【1】安装 mysql-connector-python 库
- 【2】连接 MySQL
- 【3】增加数据
- 【4】查询数据
- 【5】更新数据
- 【6】删除数据
- 2、PyMySQL 库
- 【1】安装 PyMySQL 库
- 【2】连接 MySQL
- 【3】增加数据
- 【4】查询数据
- 【5】更新数据
- 【6】更新数据
- 2)Python Redis 基础操作
- 1、部署 Redis
- 2、Python Redis 基本操作
- 【1】安装 Redis 客户端库
- 【2】连接 Redis
- 【3】设置键值对
- 【4】获取键值对
- 【5】删除键
- 【6】判断键是否存在
- 【7】设置过期时间
- 【8】自增和自减
- 三、邮件功能
- 1)开通邮箱服务功能
- 1、邮件协议介绍
- 2、QQ邮箱开启邮件服务设置
- 3、163邮箱开启邮件服务设置
- 2)Python 邮件示例讲解
一、概述
连接数据源和邮件发送和邮件接收也是在项目中很常见的功能,数据量小的话,可以存在MySQL、Redis、PostgreSQL 等等,数据量大的话,就可以考虑大型分布式高可用存储数据库系统例如:Hadoop、StarRocks、ClickHouse等等。邮件发送一般用于通知,像告警通知,下单通知,支付通知等等。
二、Python 连接数据源
1)Python MySQL 基础操作
Python是一种流行的编程语言,而MySQL是一种常用的关系型数据库管理系统。Python中有许多不同的MySQL库可供使用,其中一些最常用的库包括:
MySQL Connector
——这是MySQL官方提供的Python库,可以在Python 2.7和Python 3.x中使用。它提供了与MySQL数据库的连接和交互的API,并支持多种操作系统。PyMySQL
——这是一个纯Python实现的MySQL客户端库,可以在Python 2.7和Python 3.x中使用。它提供了一种简单而直接的方法来连接到MySQL服务器,并执行查询和其他操作。
1、部署MySQL
MySQL的介绍和部署可以参考我以下几篇文章:
- 面试宝典之——Mysql
- MySQL高可用实战( MHA)
- 【云原生】MySQL on k8s 环境部署
2、MySQL Connector 库
Python 通过 MySQL Connector 模块提供了访问 MySQL 数据库的能力,可以通过该模块使用一系列的函数来进行数据库操作。
下面是一些常用的 Python MySQL 函数:
-
connect()
:用于连接 MySQL 数据库,返回一个连接对象。 -
cursor()
:用于创建一个游标对象,该对象用于执行查询语句和读取数据。 -
execute()
:用于执行 SQL 语句,返回受影响的行数。 -
fetchone()
:用于获取结果集中的下一行数据。 -
fetchall()
:用于获取结果集中的所有数据。 -
commit()
:用于提交事务。 -
rollback()
:用于回滚事务。 -
close()
:用于关闭连接。
以下是使用MySQL Connector进行连接和增删改查的演示示例。
【1】安装 mysql-connector-python 库
首先,需要安装mysql-connector-python
库:
pip install mysql-connector-python
【2】连接 MySQL
要进行数据库操作,需要先连接MySQL数据库。连接MySQL数据库的代码如下:
import mysql.connector# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()# 关闭连接
mycursor.close()
conn.close()
在连接数据库时需要替换host
、user
、password
和database
为相应的值。
【3】增加数据
可以使用 execute()
函数执行 INSERT INTO
语句,将数据插入到数据库中。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)conn.commit()print(mycursor.rowcount, "record inserted.")# 关闭连接
mycursor.close()
conn.close()
在这个例子中,将一条记录插入到名为"customers"的表中。通过将数据作为元组传递给execute()方法,将值插入到占位符中。最后,需要使用commit()
方法提交更改。
【4】查询数据
可以使用 execute()
函数执行 SELECT
语句,查询数据库中的数据。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
conn = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = conn.cursor()mycursor.execute("SELECT * FROM customers")myresult = mycursor.fetchall()for x in myresult:print(x)# 关闭连接
mycursor.close()
conn.close()
在这个例子中,从名为"customers"的表中选择所有记录,并使用fetchall()
方法将结果存储在变量myresult中。最后,使用循环打印每个记录。
【5】更新数据
可以使用 execute()
函数执行 UPDATE
语句,更新数据库中的数据。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
mydb = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = mydb.cursor()sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, "record(s) affected")# 关闭连接
cursor.close()
conn.close()
在这个例子中,将名为"customers"的表中地址为"Highway 21"的记录的地址更新为"Canyon 123"。
【6】删除数据
可以使用 execute()
函数执行 DELETE
语句,删除数据库中的数据。以下是一个示例:
import mysql.connector# 连接到MySQL服务器
mydb = mysql.connector.connect(
user='username',
password='password',
host='hostname',
database='database_name'
)mycursor = mydb.cursor()sql = "DELETE FROM customers WHERE address = 'Canyon 123'"mycursor.execute(sql)mydb.commit()print(mycursor.rowcount, "record(s) deleted")# 关闭连接
cursor.close()
conn.close()
2、PyMySQL 库
Python PyMySQL
是一个纯 Python 实现的 MySQL 客户端库,使用 PyMySQL 可以连接 MySQL 数据库并执行数据库操作。下面介绍一些 PyMySQL 常用的函数:
-
connect()
:用于连接 MySQL 数据库,返回一个连接对象。 -
cursor()
:用于创建一个游标对象,该对象用于执行查询语句和读取数据。 -
execute()
:用于执行 SQL 语句,返回受影响的行数。 -
executemany()
:用于执行多个 SQL 语句,返回受影响的行数。 -
fetchone()
:用于获取结果集中的下一行数据。 -
fetchall()
:用于获取结果集中的所有数据。 -
fetchmany()
:用于获取结果集中指定数量的数据。 -
commit()
:用于提交事务。 -
rollback()
:用于回滚事务。 -
close()
:用于关闭连接。
【1】安装 PyMySQL 库
首先,需要安装PyMySQL
库:
pip install PyMySQL
【2】连接 MySQL
要进行数据库操作,需要先连接MySQL数据库。连接MySQL数据库的代码如下:
接下来,连接到MySQL服务器并执行查询:
import pymysql# 连接到MySQL服务器
conn = pymysql.connect(host='hostname',port=port,user='username',password='password',db='database_name',charset='utf8'
)# 创建游标对象
mycursor = conn.cursor()
在上面的代码中,需要将hostname
、port
、username
、password
和database_name
替换为实际的数据库连接信息。
【3】增加数据
可以使用 execute()
函数执行 INSERT INTO 语句,将数据插入到数据库中。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行插入语句
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)# 提交事务
conn.commit()# 打印插入数据的 ID
print(mycursor.lastrowid)# 关闭连接
cursor.close()
conn.close()
【4】查询数据
可以使用 execute()
函数执行 SELECT
语句,查询数据库中的数据。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行查询语句
sql = "SELECT * FROM customers"
mycursor.execute(sql)# 获取结果集中的所有数据
myresult = mycursor.fetchall()# 打印数据
for x in myresult:print(x)# 关闭连接
cursor.close()
conn.close()
【5】更新数据
可以使用 execute()
函数执行 UPDATE
语句,更新数据库中的数据。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行更新语句
sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Highway 21'"
mycursor.execute(sql)# 提交事务
conn.commit()# 打印受影响的行数
print(mycursor.rowcount)# 关闭连接
cursor.close()
conn.close()
【6】更新数据
可以使用 execute()
函数执行 DELETE
语句,删除数据库中的数据。以下是一个示例:
import pymysql# 连接数据库
conn = pymysql.connect(host="localhost",user="username",password="password",database="mydatabase"
)# 创建游标对象
mycursor = conn.cursor()# 执行删除语句
sql = "DELETE FROM customers WHERE address = 'Canyon 123'"
mycursor.execute(sql)# 提交事务
conn.commit()# 打印受影响的行数
print(mycursor.rowcount)# 关闭连接
cursor.close()
conn.close()
上述代码演示了如何连接到 MySQL 数据库、执行插入、更新、删除和查询操作以及关闭连接。在实际应用中,还可以使用其他函数来执行复杂的操作,如连接池、事务管理等。
2)Python Redis 基础操作
Redis 是一种基于内存的数据结构存储系统,它可以用作数据库、缓存和消息代理。Python 是一种流行的编程语言,提供了一个 Redis 客户端库,可以轻松地与 Redis 交互。下面是一些 Python Redis 基本操作的示例。
1、部署 Redis
Redis 的介绍和部署可以参考我以下几篇文章:
- 面试宝典之——Redis
- Redis原理介绍与环境部署(主从模式、哨兵模式、集群模式)
- 【云原生】Redis on k8s 编排部署讲解与实战操作
2、Python Redis 基本操作
【1】安装 Redis 客户端库
要在 Python 中使用 Redis,需要安装 Redis 客户端库。可以使用 pip 工具安装:
pip install redis
【2】连接 Redis
在 Python 中连接 Redis,需要使用 Redis 客户端库中的 Redis 类。可以使用以下代码连接到 Redis:
import redisredis_client = redis.Redis(host='localhost', port=6379, db=0)
【3】设置键值对
可以使用 set
方法设置键值对:
redis_client.set('key', 'value')
也可以使用 mset
方法一次设置多个键值对:
redis_client.mset({'key1': 'value1', 'key2': 'value2'})
【4】获取键值对
可以使用 get
方法获取单个键的值:
value = redis_client.get('key')
print(value)
也可以使用 mget
方法一次获取多个键的值:
values = redis_client.mget(['key1', 'key2'])
print(values)
【5】删除键
可以使用 delete
方法删除一个键:
redis_client.delete('key')
也可以使用 delete
方法删除多个键:
redis_client.delete('key1', 'key2')
【6】判断键是否存在
可以使用 exists
方法判断一个键是否存在:
exists = redis_client.exists('key')
print(exists)
【7】设置过期时间
可以使用 expire
方法设置一个键的过期时间(以秒为单位):
redis_client.expire('key', 60)
也可以使用 expireat
方法设置一个键的过期时间(以 Unix 时间戳为单位):
import timeexpire_time = int(time.time()) + 60
redis_client.expireat('key', expire_time)
【8】自增和自减
可以使用 incr
方法对一个键进行自增操作:
redis_client.set('count', 0)
redis_client.incr('count')
也可以使用 decr
方法对一个键进行自减操作:
redis_client.set('count', 10)
redis_client.decr('count')
以上是一些 Python Redis 的基本操作示例,可以根据具体需要进行适当修改和调整。
三、邮件功能
Python 中可以使用标准库中的 smtplib
和 email
模块来发送和接收电子邮件。
1)开通邮箱服务功能
1、邮件协议介绍
SMTP、POP3和IMAP都是电子邮件协议,用于在计算机之间传递和接收电子邮件。
-
SMTP(Simple Mail Transfer Protocol)
是用于发送电子邮件的协议。它定义了电子邮件如何通过互联网发送,包括如何连接到邮件服务器、如何验证身份、如何传输邮件、如何处理错误等。 -
POP3(Post Office Protocol version 3)
是用于接收电子邮件的协议。它定义了电子邮件如何从邮件服务器下载到本地计算机上的电子邮件客户端。POP3协议允许用户下载所有的邮件,但是在本地计算机上只保留一份副本。 -
IMAP(Internet Message Access Protocol)
也是用于接收电子邮件的协议。它定义了电子邮件如何从邮件服务器下载到本地计算机上的电子邮件客户端。IMAP协议允许用户对邮件进行管理和组织,例如在本地计算机上创建文件夹来存储邮件,而不是在邮件服务器上。这使得IMAP更适合那些需要在多个设备上使用电子邮件的用户。
总之,SMTP、POP3和IMAP是三种不同的协议,每个协议都有其独特的作用,使得电子邮件的发送和接收变得更加便捷和高效。简单地说,SMTP管发,POP3/IMAP管收。
POP(Post Office Protocol)和 IMAP(Internet Message Access Protocol)都是电子邮件客户端和邮件服务器之间的协议,但是它们在处理电子邮件的方式上有一些重要的区别:
-
工作方式:POP将邮件从邮件服务器下载到本地计算机上的邮件客户端,然后将邮件从邮件服务器中删除,这意味着用户只能在本地计算机上访问邮件的一份副本;而IMAP将邮件保留在邮件服务器上,只有在用户请求访问邮件时才会下载邮件到本地计算机上的邮件客户端。
-
多设备支持:由于POP只下载邮件的一份副本到本地计算机上,因此如果用户使用多个设备(如电脑、平板电脑、智能手机等)来访问邮件,则每个设备上的邮件客户端都会显示不同的邮件状态。而IMAP协议允许用户在多个设备上访问邮件,因为邮件始终保留在邮件服务器上。
-
邮件管理:IMAP允许用户在邮件服务器上对邮件进行管理,例如创建、删除和重命名文件夹,标记邮件已读或未读等。这使得用户可以轻松地在多个设备之间同步邮件状态。而POP协议只是简单地下载邮件并删除它们,不能像IMAP那样管理邮件。
-
带宽:由于IMAP只在用户需要访问邮件时才下载邮件,因此它可以节省带宽。而POP在每次下载邮件时都会占用带宽,因为它要下载所有邮件的一份副本。
总之,IMAP是更先进的邮件协议,可以提供更多的功能和灵活性,特别是对于那些需要在多个设备上访问邮件的用户。而POP适合那些只使用单个设备访问邮件的用户。
2、QQ邮箱开启邮件服务设置
3、163邮箱开启邮件服务设置
最后整理一下邮箱服务器:
2)Python 邮件示例讲解
以下是一个简单的 Python 脚本,演示了如何使用这两个模块来发送电子邮件。
发送邮件实例:
import smtplib
from email.mime.text import MIMEText
from email.header import Header# 设置邮件参数
smtp_server = 'smtp.example.com' # 邮件服务器
from_addr = 'your_email@example.com' # 发件人邮箱
to_addr = 'recipient_email@example.com' # 收件人邮箱
username = 'your_email@example.com' # 发件人邮箱账号
password = 'your_email_password' # 发件人邮箱密码# 构建邮件内容
msg = MIMEText('Hello, this is a test email sent by Python.', 'plain', 'utf-8')
msg['From'] = Header('Sender Name', 'utf-8')
msg['To'] = Header('Recipient Name', 'utf-8')
msg['Subject'] = Header('Python Test Email', 'utf-8')# 发送邮件
try:server = smtplib.SMTP(smtp_server, 25)server.login(username, password)server.sendmail(from_addr, to_addr, msg.as_string())server.quit()print("Email sent successfully!")
except smtplib.SMTPException:print("Error: 无法发送邮件")
接收邮件示例:
import poplib# 设置邮件参数
pop_server = 'pop.example.com' # 邮件服务器
username = 'your_email@example.com' # 邮箱账号
password = 'your_email_password' # 邮箱密码# 连接到邮件服务器
server = poplib.POP3(pop_server)
server.user(username)
server.pass_(password)# 获取邮件列表
resp, mails, octets = server.list()
print("Total emails: {}".format(len(mails)))# 获取最新一封邮件
resp, lines, octets = server.retr(len(mails))
msg_content = b'\n'.join(lines).decode('utf-8')# 解析邮件内容
from email.parser import Parser
msg = Parser().parsestr(msg_content)
print("Subject: {}".format(msg['Subject']))
print("From: {}".format(msg['From']))
print("To: {}".format(msg['To']))
print("Content:\n{}".format(msg.get_payload()))
这里的示例代码仅仅是一个简单的示例,可以根据具体的需要来修改和扩展。在使用示例时,注意修改上面的连接信息哦。
Python 连接数据源与邮件功能的讲解就先到这里了,有任何疑问欢迎给我留言哦,欢迎点赞、转发并收藏哦,也可关注我的公众号【大数据与云原生技术分享】进行深入交流技术~
相关文章:
Python 连接数据源与邮件功能(九)
文章目录一、概述二、Python 连接数据源1)Python MySQL 基础操作1、部署MySQL2、MySQL Connector 库【1】安装 mysql-connector-python 库【2】连接 MySQL【3】增加数据【4】查询数据【5】更新数据【6】删除数据2、PyMySQL 库【1】安装 PyMySQL 库【2】连接 MySQL【…...
网站如何锁定用户,超级浏览器有办法解决吗?
随着全球开放,跨境电商人纷纷开启了2023年的搞钱之旅,很多期待着在新的一年大干一场。但前事不忘后事之师,2022年跨境生意全面沦陷,其实除了大环境的因素之外,还有一个很重要的原因是,各个平台都开始实行非…...
Ubuntu下使用Wine运行HBuilderX
安装完wine后,在HbuilderX的目录中打开终端,直接输入wine HBuilderX.exe命令,启动过程中会提示安装wine-mono组件,点击安装按钮下载安装该组件,该组件下载速度慢,需要等待特别长时间。 安装完毕后&…...
如何高效远程维护分布在海外的中大型智能设备?
一、行业需求 随着越来越多的企业进行全球化经营,设备制造商和系统集成商的设备分布到全球各地,数量多而且分散,传统的设备运维方式,面临着出差成本高,工作效率低,服务不及时等问题,客户常常因…...
【双指针问题】LeetCode 925. 长按键入
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
APP测试中IOS和Android的区别,有哪些注意点?
01、常识性区别 02、导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的。还有新闻类的应用。 Android:一般放在页面…...
2019蓝桥杯真题平方序列(填空题) C语言/C++
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明想找到两个正整数 X 和 Y,满足2019<X<Y;2019^2, X^2, Y^2组成等差数列。 请你求出在所有可能的解中,XY 的最小值是多少?…...
vue中,给一个URL地址,利用FileSaver.js插件下载文件到本地
①首先下载 FileSaver.js 插件 npm install file-saver --save ②在需要的.vue页面引入 import { saveAs } from file-saver 在HTML中引入 <script src"https://cdn.bootcdn.net/ajax/libs/FileSaver.js/2.0.5/FileSaver.min.js"></script> //Fil…...
从0开始学python -34
Python3 输入和输出-2 读和写文件 open() 将会返回一个 file 对象,基本语法格式如下: open(filename, mode)filename:包含了你要访问的文件名称的字符串值。mode:决定了打开文件的模式:只读,写入,追加等。…...
瑞典军事研究:从认知心理学的视角探讨军事创新进程
来源:Military Innovation as the Result of Mental Models of Technology 《摘要》 政治紧张局势的加剧和技术发展的进步促使Scandinavian 国家(斯堪的纳维亚半岛,欧洲最大的半岛,有挪威、瑞典两国以及芬兰北端的一小部分。&am…...
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/124552080【三】深入理解mysql的索引分类&a…...
5. AOP
一、如何定义一个MethodHandler? 1.Controller注解修饰的类 1.注册成Spring Bean 2.表示它是一个SpringMVC下的Controller 2.在这个类下的方法中,只要被RequestMapping修饰&&方法的形参符合规定(需要看文档) 方法的返回值符合规定…...
ubuntu上尝试libpqxx库链接人大金仓
ubuntu上尝试libpqxx库链接人大金仓 C的项目让使用国产数据库 运维给架了一个人大金仓数据库, Kingbase 8 是基于 PostgreSQL 9.6 做的, 尝试直接使用libpqxx链接数据库。 文章目录ubuntu上尝试libpqxx库链接人大金仓第一步 搭建libpqxx开发环境搜索lib…...
【Python入门第十二天】Python 列表
Python 集合(数组) Python 编程语言中有四种集合数据类型: 列表(List)是一种有序和可更改的集合。允许重复的成员。元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。集合(…...
Android 异步操作库 RxJava
RxJava概述 RxJava 是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。 RxJava 我的理解是将事件从起点(上游)流向终点(下游),中间有很多卡片对数据进操作并传递&#x…...
2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析
2021-12-05青少年软件编程(C语言)等级考试试卷(六级)解析T1. 电话号码 给你一些电话号码,请判断它们是否是一致的,即是否有某个电话是另一个电话的前缀。比如: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在这个例子中,我们不可能拨通Bob的电话,因为Emergency的…...
github 使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录一、git与github二、出错的地方1.GitHub没有css样式2、git clone出现错误3、明明创建了responsibility 但git 不显示一、git与github 这个博客写的很好!…...
Kubernetes集群维护—备份恢复与升级
Etcd数据库备份与恢复 需要先安装etcd备份工具yum install etcd -y按不同安装方式执行不同备份与恢复kubeadm部署方式: 备份:ETCDCTL_API3 etcdctl snapshot save snap.db --endpointshttps://127.0.0.1:2379 --cacert/etc/kubernetes/pki/etcd/ca.cr…...
前端开发常用案例(二)
这里写目录标题1.loding加载动画2.全屏加载动画效果3.吃豆豆4.鼠标悬停3D翻转效果5.3D旋转木马效果6.flex弹性布局-酷狗音乐播放列表flex弹性布局-今日头条首页热门视频栏grid网格布局-360图片展示小米商城左侧二级菜单1.loding加载动画 代码如下: <!DOCTYPE h…...
基于springboot+vue的儿科保健计划免疫系统
基于springbootvue的儿科保健计划免疫系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背…...
1.两数之和
难度简单给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序…...
字符串匹配 - 模式预处理:KMP 算法(Knuth-Morris-Pratt)
Knuth-Morris-Pratt算法(简称KMP)是最常用的字符串匹配算法之一。算法简介如下算法解释主要来源于这里,但是通常很难阅读完全,我推荐你直接进入下一节 图例解释部分。我们来观察一下朴素的字符串匹配算法的操作过程。如下图&#…...
工程师手册:电源设计中的电容选用规则
摘要 电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计,电源设计应当是很重要的,它很大程度影响了整个系统的性能和成本。电源设计中的电容使用,往往又是电源设计中最容易被忽略的地方。一、电源设计中电容的工作原理 在…...
【安全开发】专栏文章汇总
安全开发–1–TCP和UDP网络编程 安全开发–2–嗅探邮箱协议口令 安全开发–3–Python实现ARP缓存投毒 安全开发–4–SSH通信工具开发 安全开发–5–编写简单的netcat工具 安全开发–6–一个简单的TCP代理工具开发 安全开发–7–SSH隧道工具开发 安全开发–8–Python实现流量数据…...
视频监控流程图4
<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/> <link rel"stylesheet" type"text/css" href"visio.css"/> <title> 视频监控流程图 </title> <…...
「JVM 编译优化」Java 语法糖(泛型、自动装箱/拆箱、条件编译)
「JVM 编译优化」Java 语法糖(泛型、自动装箱/拆箱、条件编译) 语法糖可以看做事前端编译期的一些小把戏;虽不会提供实质性的功能改进,但它们或能提高效率,或能提升语法的严谨性,或能减少编码出错的机会&a…...
Linux下的进程控制
目录 退出码 终止进程 进程等待 进程程序替换 自己实现简易shell命令行 内建命令 退出码 在编写代码时main函数内部我们通常都使用return 0;结尾,以此标识正常退出。这里的return 0就是所谓的退出码,Linux下也是一样: 看这个小程序&…...
QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged
QT 文件监视系统QFileSystemWatcher监视目录的改变相关操作说明mainwindow.hmainwindow.cpp调试结果相关操作说明 添加头文件 Header: #include qmake: QT core bool QFileSystemWatcher::addPath(const QString &path)如果路径存在,则会向文件系统监视器添…...
Typescript基础知识(类型断言、类型别名、字符串字面量类型、枚举、交叉类型)
系列文章目录 引入一:Typescript基础引入(基础类型、元组、枚举) 引入二:Typescript面向对象引入(接口、类、多态、重写、抽象类、访问修饰符) 第一章:Typescript基础知识(Typescri…...
Windows系统扩充C盘空间系列方法总结
目录前言方法一 使用自带的Windows的DiskPart扩充C盘1. 打开cmd2.三步命令方法二:使用Windows系统内置磁盘管理扩展C盘方法三. 使用专业磁盘分区工具总结前言 本教程是总结Windows系统进行C盘(系统盘)扩充空间的系列方法,一般来讲…...
工 投标做哪个网站好/网站域名查询官网
Oracle 在9i以后,可以利用DBMS_METADATA.GET_DDL包得到数据库的对象的ddl脚本。如下(SQLPLUS中执行): 1. 获取单个的建表、视图和建索引的语法set pagesize 0set long 90000set feedback offset echo offspool DEPT.sqlselect dbm…...
澳门赌网站有做代理/做网站推广一般多少钱
有2台域控 主域控 AD1: IP:192.168.0.1/24首选 DNS 服务器:127.0.0.1备用 DNS 服务器: 192.168.0.2额外 AD2: IP:1921.68.0.2/24首选 DNS 服务器:127.0.0.1备用 DNS 服务器: 192.168.0.1第三台域控: 额外AD3: IP:192.168.0.3/24首选 DNS 服务器:127.0.0.1备用 DNS …...
网站建设案例基本流程图/枸橼酸西地那非片的作用及功效
sudo npm install -g n固定版本:sudo n 12.18.3; 最新版本:n lastest; 稳定版本:n stable...
ipad网站开发/如何做网络营销?
还在用mvn archetype:create -DarchetypeArtifactIdmaven-archetype-quickstart -DgroupIdcom.ryanote -Dartifactcommon这样的方式来创建mvn项目吗?一长串需要输入的名字让人记着头疼,更要命的是,你不知道有哪些可用的archetypeArtifactId和…...
四川住房建设厅网站首页/官方百度下载安装
💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳座右铭&#…...
新手怎么搭建网站/现在如何进行网上推广
ueditor以下错误: ““/”应用程序中的服务器错误。 -------------------------------------------------------------------------------- 未能执行 URL。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该…...